可能重复:
C# - Eric Lippert 的博客中的 foreach 标识符和闭包
:“不要关闭循环变量”</a>
我使用 lambda 表达式作为ThreadStart
参数,使用Thread类在新线程中运行方法。这是我的代码:
delegate void del();
static void Do(int i)
{
Console.WriteLine(i);
}
static del CreateLoop(del Do)
{
return () =>
{
while (true)
{
Do();
Thread.Sleep(500);
}
};
}
static void Main(string[] args)
{
int n = 0;
var loop = CreateLoop(() => Do(n));
new Thread(() => loop()).Start();
Thread.Sleep(500);
n = 1;
}
这是输出:
0
1
1
1
...
这怎么可能?
为什么如果我更改整数变量n
的值,也会更改i
(Do
的参数)的值?