Saya menemukan dalam sampel Linq MSDN sebuah metode rapi yang disebut Fold () yang ingin saya gunakan. Contoh mereka:
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
double product =
doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);
Sayangnya, saya tidak bisa mendapatkan ini untuk dikompilasi, baik dalam contoh mereka atau dalam kode saya sendiri, dan saya tidak dapat menemukan tempat lain di MSDN (seperti metode ekstensi Enumerable atau Array) yang menyebutkan metode ini. Kesalahan yang saya dapatkan adalah kesalahan lama "tidak tahu apa-apa tentang itu":
error CS1061: 'System.Array' does not contain a definition for 'Fold' and no
extension method 'Fold' accepting a first argument of type 'System.Array' could
be found (are you missing a using directive or an assembly reference?)
Saya menggunakan metode lain yang saya percaya berasal dari Linq (seperti Select () dan Where ()), dan saya "menggunakan System.Linq", jadi saya pikir itu semua OK.
Apakah metode ini benar-benar ada di C # 3.5, dan jika demikian, apa yang saya lakukan salah?
Jawaban:
Anda akan ingin menggunakan
Aggregate
metode ekstensi:Lihat MSDN untuk informasi lebih lanjut. Ini memungkinkan Anda menentukan
seed
dan kemudian ekspresi untuk menghitung nilai yang berurutan.sumber
Func
hanya dipanggil setelah elemen kedua tercapai. Lihat: msdn.microsoft.com/en-us/library/vstudio/…ToString()
, dengan demikian mengembalikan representasi teks dari seluruh wadah.<double>
jenis parameter hanya secara otomatis disimpulkan oleh compiler dan dengan demikian tidak perlu.p
danelem
bisa tipe apapun yang Anda suka. Lihat kelebihan beban ini seperti yang digunakan dalam contoh iniLipat (alias Reduce) adalah istilah standar dari pemrograman fungsional. Untuk alasan apa pun, itu dinamai Agregat di LINQ.
sumber