2009-06-04 13 views

cevap

4

Bu diğer yollarla olarak yaklaşık olarak belli değil, ama sorun çıkmaması gerekir:

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

Benim diğer alternatif buna benzer bir ForEach uzantısı yöntemi yapmak olurdu Sonra da şu şekilde kullanın:

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

Bu, bu durumda çalışmaz, imzalandı.

+0

Temel olarak, ilk kod parçasını gerçekte asla kullanmam. Uzantı yöntemi harika olabilir, ancak Değer atanamadıkça, sözlükler çok fazla izin vermez. –

+1

Net değil * ve * daha az verimli (anahtarların klonlanmış bir listesini oluşturur ve 1 yerine 2 yineleme yapar) ... bir kazanan! –

4

LINQ bir sorgu lehçesidir - doğrudan bir mutasyon dili değildir. Eğer bir ihtiyaç olsa da, böyle bir şey yapıyor olabilir Acaba neden

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

Ayrıca bir mutasyon dili olsaydı hoş olmaz mıydı? –

+3

Bu nedir? –

+1

Bu, numaralandırma sırasında koleksiyon değiştirme hakkında bir çalışma zamanı hatası verir ve foreach döngüsü devam edemez. – pauldoo

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

:

varolan sözlüğe değerlerini değiştirmek için, foreach muhtemelen senin arkadaşın.

+0

Bu bir aşırı basitleştirmekti. –

İlgili konular