C#:将参数传递给回调

Gra*_*ell 3 c# silverlight callback

我有一个相当通用的类(Record),我已经添加了一个回调处理程序,所以我可以做类似下面的事情.

record.Save(AfterSaveMethod);
Run Code Online (Sandbox Code Playgroud)

其中还返回创建的记录的标识号.我现在的问题是我在循环中有这个嵌套的保存例程,我需要使用/传递i变量!

for (int i; i < count ;i++)
{
    record.Save(AfterSaveMethod2) //but I need to pass i through as well
}  
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

\ _重写save方法并将其包含在此类(yuk)中,

B \有一个重载的保存选项,它将一个对象作为参数,因此我可以将它传递给我的记录类,然后将其与标识号合并.返回身份编号和传递对象中包含的任何额外内容(嗯,听起来有点乱),

C \有更性感的选择吗?

Jon*_*eet 8

这是匿名方法或lambda表达式真正方便的地方:)

试试这个(假设C#3):

for (int i = 0; i < count; i++)
{
    int index = i;
    record.Save(id => AfterSaveMethod2(id, index));
}
Run Code Online (Sandbox Code Playgroud)

请注意,此处的lambda表达式是捕获index,而不是i- 这是为了避免关闭循环变量时固有的问题.