Encontré en las muestras de Linq de MSDN un método ordenado llamado Fold () 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 compilar esto, ya sea en su ejemplo o en mi propio código, y no puedo encontrar en ningún otro lugar de MSDN (como los métodos de extensión Enumerable o Array) que mencionen este método. El error que recibo es un simple y antiguo error "no sé nada sobre eso":
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.
¿Existe realmente este método en C # 3.5? Si es así, ¿qué estoy haciendo mal?
c#
linq
extension-methods
reduce
Conocido
fuente
fuente
Respuestas:
Querrá utilizar el
Aggregate
método de extensión:Consulte MSDN para obtener más información. Le permite especificar una
seed
expresión y luego una para calcular valores sucesivos.fuente
Func
solo se llama una vez que se alcanza el segundo elemento. Ver: msdn.microsoft.com/en-us/library/vstudio/…ToString()
, así devolver una representación de texto de todo el contenedor.<double>
compilador infiere automáticamente el parámetro de tipo y, por lo tanto, no es necesario.p
yelem
puede ser del tipo que desee. Vea esta sobrecarga como se usa en este ejemploFold (también conocido como Reducir) es el término estándar de la programación funcional. Por el motivo que sea, recibió el nombre Aggregate en LINQ.
fuente