2013-12-23 61 views
6

時,我有一類這樣的:指數數組的邊界之外使用的List <Func鍵<T,object>>

class MyClass { public object[] Values; } 

別的地方我使用它:

MyClass myInstance = new MyClass() {Values = new object[]{"S", 5, true}}; 

List<Func<MyClass, object>> maps = new List<Func<MyClass, object>>(); 

for (int i = 0; i < myInstance.Values.Length ; i++) 
{ 
    maps.Add(obj => obj.Values[i]); 
} 

var result = maps[0](myInstance); //Exception: Index outside the bounds of the array 

我以爲它會返回S,但它拋出異常。任何想法是怎麼回事?

回答

8

要查看發生了什麼,請將您的lambda更改爲maps.Add(obj => i);

隨着那個變化result將是3,這就是爲什麼你得到IndexOutOfBoundException例外:你試圖得到myInstance[3]哪些不存在。

要使其工作,你的循環中添加本地int變量和使用,作爲一個指標,而不是循環計數器i

for (int i = 0; i < myInstance.Values.Length; i++) 
{ 
    int j = i; 
    maps.Add(obj => obj.Values[j]); 
} 
+0

所以我如何使它的工作? –

+0

我已經更新了我的答案。 – MarcinJuraszek

+0

是的,它解決了這個問題。但你能解釋爲什麼'我'值的行爲像參考值? –

相關問題