我有一个带有事件处理程序的对象,我想制作类似于VB6的东西来制作该对象的数组。类似的东西:
MyHandler(object sender, MyEventArgs e, int IndexOfObject)
答案 0 :(得分:3)
有一些小问题......你必须确保用于传递给处理程序的变量不会在范围内发生变化。这是因为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);
};
}
答案 1 :(得分:3)
observed[idx].WhateverEvent += delegate(sender, e)
{
// Code that was in Myhandler, can access idx
};