람다 식은 익명 대리자의 간단한 구문이며 익명 대리자가 사용될 수있는 모든 곳에서 사용할 수 있습니다. 그러나 그 반대는 사실이 아닙니다. 람다 식은 LINQ to SQL과 같은 많은 마법을 허용하는 식 트리로 변환 될 수 있습니다.
다음은 익명 대리자를 사용하고 람다 식을 사용하여 LINQ to Objects 표현식 의 예입니다 .
// anonymous delegate
var evens = Enumerable
.Range(1, 100)
.Where(delegate(int x) { return (x % 2) == 0; })
.ToList();
// lambda expression
var evens = Enumerable
.Range(1, 100)
.Where(x => (x % 2) == 0)
.ToList();
Lambda 표현식과 익명 델리게이트는 별도의 함수를 작성하는 것보다 이점 이 있습니다. 클로저 를 구현 하면 함수에 매개 변수 를 추가 하거나 일회용 객체를 만들지 않고도 로컬 상태를 함수 에 전달할 수 있습니다.
식 트리는 C # 3.0의 매우 강력한 새로운 기능으로, API가 실행할 수있는 메서드에 대한 참조를 얻는 대신 식의 구조를 볼 수 있도록합니다. API는 대리자 매개 변수를 매개 변수로 만들면 Expression<T>
컴파일러가 익명 대리자 대신 람다에서 식 트리를 생성합니다.
void Example(Predicate<int> aDelegate);
처럼 호출 :
Example(x => x > 5);
된다 :
void Example(Expression<Predicate<int>> expressionTree);
후자는 표현식을 설명하는 추상 구문 트리 의 표현을 전달 받게됩니다 x > 5
. LINQ to SQL은 C # 표현식을 서버 측에서 필터링 / 순서 등으로 원하는 SQL 표현식으로 변환 할 수 있도록이 동작에 의존합니다.
delegate
C #으로, 나는 매우 이것을 읽고 제안 하기 전에 :이 페이지의 나머지 부분을 읽기 stackoverflow.com/questions/2082615/...