하나의 코드가 컴파일에 실패하고 다른 코드가 제대로 컴파일되는 이유에 대한 좋은 설명을 찾고 있습니다.왜 lambda 문 괄호로 인해 구문 오류가 발생합니까?
실패 :
richTextBox1.Invoke(new MethodInvoker((() => { richTextBox1.AppendText("test"); })));
는 방법 이름이 바로 MethodInvoker(
후 여는 괄호에
예상
오류를 제공합니다. 분명히, 나는 괄호 안에 람다 문을 감쌀 수 없다.
컴파일 :
richTextBox1.Invoke(new MethodInvoker(() => { richTextBox1.AppendText("test"); }));
질문입니다 - 왜?
나는 원하는 경우 괄호 안에 메서드 param을 래핑 할 수 있다고 항상 당연히 생각했지만 분명히 람다 식의 경우는 그렇지 않습니다. 나는 그것들이 다소 특별하다는 것을 이해하지만, 나는 아직도 이것에 대한 좋은 이유를 볼 수 없다. 어쩌면 내가 구문에 대해 뭔가를 이해하지 못할 수도 있습니다. 나는 정말로 그것을 얻고 싶다.
덧붙여서, 이것은 VS2008, .NET 3.5 SP1에서, VS2010과 .NET 4에서는 아직 테스트하지 않았습니다.
감사합니다. 호기심에서 벗어나 - 그 장소의 예를 제공해 주시겠습니까? – Dyppl
@Dyppl :'Func F() {return (() => 1); }'는 합법적이지만 스펙에 따르면 안된다. –
jason
감사합니다! 글쎄, 내 질문에 대해 좀 더 기분이 좋다. 이러한 불일치로 인해 결국 머리가 엉망이 될 것입니다. – Dyppl