Pregunta

Encontré en muestras Linq de MSDN un método ordenado llamado Doblar () que quiero usar. Su ejemplo:

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

Desafortunadamente, no puedo hacer que esto se compile, ya sea en su ejemplo o en mi propio código, y no puedo encontrar ningún otro lugar en MSDN (como los métodos de extensión Enumerable o Array) que mencionan este método. El error que recibo es un viejo "no sé nada de eso" error:

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

Estoy usando otros métodos que creo que provienen de Linq (como Select () y Where ()), y estoy '' usando System.Linq '', así que creo que todo está bien.

¿Este método realmente existe en C # 3.5, y si es así, qué estoy haciendo mal?

¿Fue útil?

Solución

Deberá utilizar el método de extensión Aggregate :

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

Consulte MSDN para obtener más información. Le permite especificar una semilla y luego una expresión para calcular valores sucesivos.

Otros consejos

Fold (también conocido como Reducir) es el término estándar de la programación funcional. Por alguna razón, se llamó Aggregate en LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top