97

MSDN の Linq サンプルで、私が使用したい Fold() というきちんとしたメソッドを見つけました。彼らの例:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; 
double product = 
     doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor); 

残念ながら、サンプルでも自分のコードでも、これをコンパイルすることはできません。また、このメソッドについて言及している MSDN の他の場所 (Enumerable または Array 拡張メソッドなど) を見つけることもできません。私が得るエラーは、昔ながらの「それについて何も知らない」というエラーです。

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?)

私は、Linq (Select() や Where() など) に由来すると思われる他のメソッドを使用しており、「System.Linq を使用している」ので、それで問題ないと思います。

このメソッドは C# 3.5 に本当に存在しますか? もしそうなら、何が間違っていますか?

4

2 に答える 2

133

Aggregate拡張メソッドを使用する必要があります。

double product = doubles.Aggregate(1.0, (prod, next) => prod * next);

詳細については、 MSDNを参照してください。を指定してから式を指定してseed、連続する値を計算できます。

于 2009-08-05T01:22:56.307 に答える
42

Fold (別名 Reduce) は、関数型プログラミングの標準用語です。何らかの理由で、LINQ ではAggregateという名前が付けられました。

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
于 2009-08-05T01:22:27.553 に答える