, 증거 :
class Foo
{
public void SomeFunction(int i) { }
}
static void Main()
{
int count = 0;
List<Foo> list = new List<Foo> {new Foo()};
list.ForEach(i => i.SomeFunction(count++));
Console.WriteLine(count); // 1
}
람다 행위는 (이미 언급 한 바와 같이) "캡처"본질적으로 같은 코드를 만들고, 계산하기 :
class Foo
{
public void SomeFunction(int i) { }
}
class CaptureScope
{
public int count;
public void AnonMethod(Foo foo)
{
foo.SomeFunction(count++);
}
}
static void Main()
{
CaptureScope scope = new CaptureScope();
scope.count = 0;
List<Foo> list = new List<Foo> {new Foo()};
list.ForEach(scope.AnonMethod);
Console.WriteLine(scope.count); // 1
}
위의 대략적인 근사치 컴파일러가 델리게이트 람다를 해석하는 방법 보시다시피, count
은 클래스의 필드이고 은입니다.
나는 당신이 그들을 사용하는 동시에 변수 수정에 대한 조언, 그것은 당신에게 많은 입력을 저장하지 않고 문제의 끝이 발생할 수 있습니다. –