2010-09-14 10 views
19

Ho il seguente codice e sto cercando di capire come moltiplicare tutti i valori nel mio IEnumerable.Muliplying tutti i valori in IEnumerable <int>

Ho pensato che ci potrebbe essere con un metodo Moltiplica come c'è con Sum. Immagino che potrei fare un foreach su ogni oggetto ma in questi giorni questo sembra noioso.

Qualche suggerimento?

//1:2:6 
string[] pkgratio = comboBox1.SelectedRow.Cells["PkgRatio"].Value.ToString().Split(':'); 
var ints = pkgratio.Select(x => int.Parse(x));   

int modvalue = ints.... 

risposta

31

Quello che stai cercando è la funzione di aggregazione

int modValue = ints.Aggregate(1, (x,y) => x * y); 

la funzione di aggregazione prende in un valore dell'accumulatore iniziale e poi si applica un'operazione per ogni valore nell'enumerazione creazione di un nuovo valore dell'accumulatore. Qui iniziamo con 1 e moltiplichiamo sempre il valore attuale dell'accumulatore.

Nota: nel caso di un valore ints vuoto, verrà restituito 1. Questo potrebbe essere o non essere corretto per la situazione.

+0

Grazie. Ho appena provato ints.Aggregate (1, (x, y) => x + y); e per 1,2,6 si sommano fino a 10. Immagino sia perché aggiunge 1 per iniziare. Moltiplicando però andrà bene ?? – Jon

+0

@Jon: Sì. Puoi anche omettere del tutto il seme e fare 'ints.Aggregate ((x, y) => x * y)' ma questo genererà un'eccezione se gli dai una sequenza vuota. – LukeH

+0

Ho appena provato e comunque lancia un'eccezione anche se il seme è lì in una sequenza vuota – Jon

Problemi correlati