[英]how to specify optional anonymous ienumerable parameters in c# abstract method
[英]C# Anonymous method variable scope problem with IEnumerable<T>
我正在嘗試遍歷所有組件,並且對於那些實現ISupportsOpen的人來說,允許打開一個項目。 問題是當調用匿名方法時,組件變量總是相同的元素(來自IEnumerable的外部作用域)
foreach (ISupportsOpen component in something.Site.Container.Components.OfType<ISupportsOpen>())
{
MyClass m = new MyClass();
m.Called += new EventHandler(delegate(object sender, EventArgs e)
{
if (component.CanOpenProject(..)) component.OpenProject(..);
});
itemsList.Add(m);
}
請問應該如何解決?
只是不要關閉循環變量 - 復制它:
foreach (ISupportsOpen component in
something.Site.Container.Components.OfType<ISupportsOpen>())
{
ISupportsOpen copy = component;
MyClass m = new MyClass();
m.Called += new EventHandler(delegate(object sender, EventArgs e)
{
if (copy.CanOpenProject(..)) copy.OpenProject(..);
});
itemsList.Add(m);
}
這樣,您就可以為循環的每次迭代獲得copy
變量的新“實例” - 因此每個委托將捕獲該不同的實例。 之前,每個代表都捕獲相同的變量。
(這在某種程度上是一個重復的問題,但這是一個相對難以搜索的問題,所以我很樂意多次回答。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.