如何在C#中为变量创建闭包?

mpe*_*pen 1 c# closures

以下示例在1秒后打印数字"5"五次.

for (int i = 0; i < 5; ++i)
{
    EasyTimer.SetTimeout(() => Console.WriteLine(i), 1000);
}
Run Code Online (Sandbox Code Playgroud)

(假设EasyTime.SetTimeout表现得像JavaScript一样setTimeout)

我们如何创建一个闭包i,使它能够记住它的回调值?

我知道如何在JavaScript中完成它,但我不确定我们是否可以在C#中以相同的方式执行此操作.

Ada*_*erg 8

在块内,将i分配给新变量j,并在lambda中使用j,如下所示:

for (int i = 0; i < 5; ++i)
{
    int j = i;
    EasyTimer.SetTimeout(() => Console.WriteLine(j), 1000);
}
Run Code Online (Sandbox Code Playgroud)

值得注意的是,这个问题只会因为lambda 一个闭包而产生i,因此它在lambda执行时得到的值,而不是在它创建时.