2009-11-18 30 views
11

Herkese selam yazmak ve anonim delege çalışıyorum. tamsayı değişkeni delege arasında paylaşıldığı için her delege'nin yerel örneği olması gerekir, böylece rs [0] her zaman nics [0] alır, rs [1] her zaman nics [1] alır ve ... nasıl Bunu başaracağım.Bir döngü içinde Anonim C# delege

for (int i = 0; i < nics.Count; i++) 
    { 
     rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate() 
     { 
      return GetNetworkUtilization(nics[i]); 
      })); 
    } 

Abdul khaliq

+5

Ne istediğine dikkat derece * * olun: bunun neden böyle merak ediyorsanız

, burada ayrıntılı bir teknik açıklama içeren bir MSDN blog girişi olduğunu. İlk kapanışınızın, temsilci çağırıldığında * nics [0] * değerini her zaman almasını mı istiyorsunuz, yoksa kapanışın, [0] * nitesinde gerçekleşen değeri almasını istediğiniz zaman mı istiyorsunuz? delege oluşturuldu *? Bunlar iki farklı şey; nics [0] bir değişkendir, bu yüzden değeri zaman içinde değişebilir. Kapanışın bu değişikliği görmesini mi yoksa bu değişikliği görmezden mi geldiğini? –

cevap

20

i yerel bir kopyasını yapın:

for (int i = 0; i < nics.Count; i++) 
    { 
     int j = i; 
     rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate() 
     { 
      return GetNetworkUtilization(nics[j]); 
      })); 
    } 

The Beauty of Closures

+0

Veya dizideki öğenin yerel bir kopyası. – Dykam

6

kullanın yerel yineleme başına farklı bir değer elde etmek

for (int i = 0; i < nics.Count; i++) 
    { 
     int localI = i; 
     rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate() 
     { 
      return GetNetworkUtilization(nics[localI]); 
      })); 
    }