Encontrei nos exemplos do Linq do MSDN um método bacana chamado Fold () que desejo usar. O exemplo deles:
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
double product =
doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);
Infelizmente, não consigo fazer isso para compilar, nem em seu exemplo ou em meu próprio código, e não consigo encontrar nenhum outro lugar no MSDN (como métodos de extensão Enumerable ou Array) que mencionem esse método. O erro que recebo é um erro "não sei nada sobre isso":
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?)
Estou usando outros métodos que acredito vir do Linq (como Select () e Where ()), e estou "usando System.Linq", então acho que está tudo bem.
Esse método realmente existe no C # 3.5 e, em caso afirmativo, o que estou fazendo de errado?
Respostas:
Você vai querer usar o
Aggregate
método de extensão:Consulte MSDN para obter mais informações. Ele permite que você especifique um
seed
e, em seguida, uma expressão para calcular valores sucessivos.fonte
Func
só é chamado quando o segundo elemento é alcançado. Consulte: msdn.microsoft.com/en-us/library/vstudio/…ToString()
, assim retornar uma representação de texto de todo o contêiner.<double>
parâmetro de tipo é apenas inferido automaticamente pelo compilador e, portanto, não é necessário.p
eelem
pode ser do tipo que você quiser. Veja esta sobrecarga conforme usada neste exemploDobrar (também conhecido como Reduzir) é o termo padrão da programação funcional. Por alguma razão, ele foi denominado Aggregate no LINQ.
fonte