2009-11-18 78 views
11

大家好我想寫和匿名委託。因爲整數變量是委託之間共享我需要它是每個委託的本地實例,使得rs [0]總是得到nics [0],rs [1]總是得到nics [1]等等......如何我會做到這一點嗎?匿名c#代表循環內

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

阿卜杜勒·哈利克

+5

爲*極其*小心你要求什麼。你希望你的第一個閉包在調用委託的時候總是得到nics [0] *中的值,或者你想讓閉包得到nics [0] *時的值代表被創建*?那是兩回事。 nics [0]是一個變量,所以它的值可以隨時間變化。你是否希望封閉看到這種變化,或忽略這種變化? –

回答

20

使i本地副本:

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

或數組中項目的本地副本。 – Dykam

6

使用本地得到每次迭代不同的值

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