2009-06-04 13 views

答えて

4

これは、他の方法ほど明確ではないが、それは正常に動作する必要があります:

public static class MyExtensions 
{ 
    public static void ForEach<T>(this IEnumerable<T> items, Action<T> action) 
    { 
     foreach (var item in items) 
     { 
      action(item); 
     } 
    } 
} 

dictionary.Keys.ToList().ForEach(i => dictionary[i] = 0); 

私の他の代替は、これに類似するForEach拡張メソッドを作ることだっただろう

dictionary.ForEach(kvp => kvp.Value = 0); 

この場合、値は次のようには使用できません。に署名しました。

+0

基本的に、私は実際には最初のコードを使用しません。拡張メソッドは素晴らしいかもしれませんが、値を割り当てることができないので、辞書はあまり許されません。 –

+1

明確ではない*と*効率が悪い(鍵のクローンリストを作成し、1ではなく2回反復する)...勝者! –

4

LINQは直接的に突然変異言語ではありません。

既存の辞書の値を変更するには、foreachは、おそらくあなたの友達です:

foreach(int key in dictionary.Keys) { 
    dictionary[key] = 1; 
} 
+0

突然変異言語であってもいいのではないでしょうか? –

+3

これはなんですか... –

+1

これは、列挙中にコレクションの変更に関する実行時エラーが発生し、foreachループを続行できないことを示します。 – pauldoo

2
foreach (var item in dictionary.Keys) 
    dictionary[item] = 1; 

あなたが必要なことをやっかもしれない、なぜ私はしかし、不思議。

+0

これはあまり単純化されていませんでした。 –

関連する問題