English 中文(简体)
关于论坛和代表的问题
原标题:Question about foreach and delegates
  • 时间:2009-10-21 12:48:42
  •  标签:

赞同以下法典:

foreach(Item i on ItemCollection)
{
   Something s = new Something();
   s.EventX += delegate { ProcessItem(i); };
   SomethingCollection.Add(s);
}

当然,这是错误的,因为所有代表都提到同一项目。 另一种办法是:

foreach(Item i on ItemCollection)
{
   Item tmpItem = i;
   Something s = new Something();
   s.EventX += delegate { ProcessItem(tmpItem); };
   SomethingCollection.Add(s);
}

在这种情况下,所有代表都提到自己的项目。

这种做法是什么? 还有任何其他更好的解决办法?

最佳回答
问题回答

法典第二层只是关于你能够找到其他所有事情的最佳方法。

但可在<代码>上设定财产。 选取<>代码>Item。 反过来,《活动守则》也可在活动发端人处查阅<代码>Item,或可列入活动情况。 因此,消除了关闭的必要性。

个人而言,我补充说,“消除不必要的封锁”是一个值得考虑的因素,因为很难给它们解释。

The problem you are facing here is related to such language construct as closure. Second piece of code fixes the problem.

foreach(Item i on ItemCollection)
{
   Something s = new Something(i);
   s.EventX += (sender, eventArgs) => { ProcessItem(eventArgs.Item);};
   SomethingCollection.Add(s);
}

请不要把我带给你。 某类学校,最终使用 十项活动





相关问题
热门标签