從這個答案https://stackoverflow.com/a/6457528/299110與lambda表達式事件處理似乎有錯誤的參數值
我使用ctrl.PreRender += (sender, e) => ControlPreRender(ctrl, rule);
到一個或多個控件foreach
內,使用Ctrl和規則的每次更改值。
但是,當調用ControlPreRender
方法時,rule
參數看起來與事件處理程序附加到的發件人不符。
我知道我錯過了這裏的東西,不知道是什麼,但!
更新: 感謝您的答案,Eric Lippert的博客真的解釋了它。正如下選民的建議,我已經把更多的代碼如下,希望改善的問題了一下:
foreach (var ctrl in controls)
{
// ...
foreach (var rule in rules)
{
// ...
ctrl.PreRender += (sender, e) => ControlPreRender(ctrl, rule);
}
}
public static void ControlPreRender(Control ctrl, ControlRule rule)
{
// ...
}
想法是...哪個?另外,你能展示更多的代碼嗎?否則,我們不可能知道您在匿名方法中使用的局部變量'ctrl'和'rule'會發生什麼。 –
它可能與此有關:http://msdn.microsoft.com/en-us/library/ms173174(v=vs.80).aspx – BlackBear
'rule'的作用域是什麼?聞起來像修改一個封閉的變量給我... – verdesmarald