2010-04-05 57 views

回答

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); 
            }; 
} 
+0

呃,但在C#2.0 – blez 2010-04-05 10:45:30

+3

@blez:如果您需要下级版本,提到它的问题。 – Richard 2010-04-05 11:16:11

3
observed[idx].WhateverEvent += delegate(sender, e) 
           { 
            // Code that was in Myhandler, can access idx 
           };