2015-11-26 26 views
0

假設我有一個MyClass對象數組(不只是IEnumerable<int>)。 MyClass有一個字符串字段(例如名稱)和int字段(例如大小)。 我需要將數組中所有元素的乘積大小作爲結果(int result = array[0].size*array[1].size*...array[n].size)。 使用數組迭代很容易實現,但我不知道如何使用lambda實現它。 謝謝。C#使用lambda表示數組元素的字段

回答

6

使用Aggregate

int result = array 
    .Select(item => item.size) 
    .Aggregate((x, y) => x * y); 
+0

我認爲你需要播種'Aggregate'用'1'('.Aggregate(1,(X,Y)=> X * Y)'),否則一切乘以0.我可能是錯誤的,因爲我還沒有嘗試過! –

+0

@Arno:如果沒有給出種子,則將該序列的第一個元素作爲種子。 – Fratyx

+0

@Fratyx,我不知道。出於某種原因,我認爲它在第一次調用時將'TSource'的默認值用於'x'。那麼這是否意味着'x'和'y'在第一次調用lambda時引用了相同的元素?我認爲這樣做仍然可能會給出錯誤的結果,因爲第一個元素會倍增兩次? –