2009-06-25 5 views

답변

16

람다 식 자체는 소스 코드에만 존재합니다. 형식 자체가 없기 때문에 컴파일러는 항상 특정 형식으로 변환한다고 주장합니다. 이 코드는 컴파일되지 않는 이유

:

// No idea what type to convert to! 
object x = y => y.Length; 

을하지만이 작업을 수행합니다

Func<string, int> x = y => y.Length; 

람다 표현식은 항상 중 하나 대리자 형식 또는 식 트리 형식으로 변환된다 . 마찬가지로, 익명 메서드는 항상 대리자 형식으로 변환됩니다.

+0

+1 좋은 답변입니다. 나는 당신이 람다 표현식이 실제로 델리게이트 나 표현식 트리에 대한 구문 설탕이라는 것을 설명하는 것을 좋아합니다. –

4

Linq에서의 람다 연산은 표현 트리라고 불리는 것을 구축합니다. 그것에 대해 조금 읽을 수 있습니다 here.

+4

글쎄요. 또는 대표자를 만들 수도 있습니다. 공급자에 따라 다릅니다. –

0

일종의 대리인을 준수해야하는 익명의 기능입니다. msdn 사실, 이들은 일부 대리인 유형의 인스턴스입니다.

+2

식 트리로 변환되지 않는 한 ... –