가능한 중복 :
C# - The foreach identifier and closures
From Eric Lippert’s blog: “don’t close over the loop variable”람다 식
내가 사용하는 새 스레드에서 메소드를 실행하려면 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
의 매개 변수) 값도 변경됩니까?
@ L.B 그게 변수 범위에 대한 캡처 된 변수에 관한 ... – gliderkite
gliderkite, 그래서 당신은 전에 아무도 직면하지 아주 특별한 경우에 충돌? 참조를 다시 읽으십시오. –