【发布时间】:2010-04-05 10:28:32
【问题描述】:
我有一个带有事件处理程序的对象,我想制作类似于 VB6 的东西来制作该对象的数组。比如:
MyHandler(object sender, MyEventArgs e, int IndexOfObject)
【问题讨论】:
我有一个带有事件处理程序的对象,我想制作类似于 VB6 的东西来制作该对象的数组。比如:
MyHandler(object sender, MyEventArgs e, int IndexOfObject)
【问题讨论】:
有一些小警告...您必须确保用于传递给处理程序的变量不会在范围内更改。这是因为 C# 支持词法闭包并通过引用使用变量(我相信 Jon Skeet 可以更好地解释它)。只需复制您使用的变量,否则您会得到一些有趣的行为。
for (int i = 0; i < observed.Length; ++i)
{
int idx = i;
observed[idx].WhateverEvent += delegate(object sender, EventArgs e)
{
MyHandler(sender, e, idx);
};
}
【讨论】:
observed[idx].WhateverEvent += delegate(sender, e)
{
// Code that was in Myhandler, can access idx
};
【讨论】: