익명 방법 (C# 2.0)과 람다 표현식 (C# 3.0)의 차이점은 무엇입니까? [복제하다

StackOverflow https://stackoverflow.com/questions/208381

  •  03-07-2019
  •  | 
  •  

문제

이 질문은 이미 여기에 답이 있습니다.

차이점은 무엇입니까? 익명 방법 C# 2.0 및 람다 표현 C# 3.0.?

도움이 되었습니까?

해결책

익명 방법에 대한 MSDN 페이지가 설명합니다

2.0 이전의 C# 버전에서 대의원을 선언하는 유일한 방법은 명명 된 메소드를 사용하는 것이 었습니다. C# 2.0은 익명의 방법을 도입하고 C# 3.0 이상에서 Lambda Expressions는 익명 방법을 인라인 코드를 작성하는 선호하는 방법으로 대체했습니다. 그러나이 주제의 익명 방법에 대한 정보는 Lambda 표현에도 적용됩니다. 익명 방법이 Lambda 표현식에서 찾을 수없는 기능을 제공하는 경우가 하나 있습니다. 익명의 방법을 사용하면 매개 변수 목록을 생략 할 수 있으며 이는 익명 방법을 다양한 서명을 가진 대의원으로 변환 할 수 있음을 의미합니다. 이것은 람다 표현에서는 불가능합니다. Lambda Expressions에 대한 자세한 내용은 Lambda Expressions (C# 프로그래밍 안내서)를 참조하십시오.

그리고 람다 표현에 관해:

Lambda 표현은 표현 및 진술을 포함 할 수있는 익명의 기능이며 대의원 또는 표현 트리 유형을 만들 때 사용될 수 있습니다. 모든 Lambda 표현식은 Lambda 연산자 =>를 사용하며 "GOES TO"로 읽습니다. Lambda 연산자의 왼쪽은 입력 매개 변수 (있는 경우)를 지정하고 오른쪽은 표현식 또는 명령문 블록을 유지합니다. Lambda Expression x => x * x는 "x는 x times x로 간다"를 읽습니다. 이 표현식은 다음과 같이 대의원 유형에 할당 될 수 있습니다.

다른 팁

  1. 람다 표현은 대의원이나 표현 나무로 전환 될 수 있습니다 (일부 제한 사항). 익명의 방법은 대의원에게만 변환 할 수 있습니다
  2. Lambda 표현식은 매개 변수에 대한 유형 추론을 허용합니다.
  3. Lambda 표현은 신체를 단지 값을 반환하기 위해 (값을 반환하기 위해) 또는 단일 진술 (다른 경우)에 단지 잘라낼 수 있도록합니다.
  4. Lambda 표현식은 유형을 추론 할 수 있고 단일 매개 변수 만있는 경우 매개 변수 목록을 매개 변수 이름으로 단축 할 수 있습니다.
  5. 익명의 방법은 신체 내에서 사용되지 않을 때 매개 변수 목록을 완전히 생략 할 수 있으며 모호성으로 이어지지 않습니다.

마지막 요점은 Lambdas보다 익명의 방법의 유일한 이점입니다. 그러나 NO-OP 구독이있는 필드와 같은 이벤트를 만드는 것이 유용합니다.

public event EventHandler Click = delegate{};
  1. 익명의 방법은 기본적으로 이름이없는 함수이며 클로저를 만들 수 있습니다.
  2. Lambda 표현식은 익명의 방법과 표현 트리로 전환 할 수있는 구성이며 익명의 방법보다 더 복잡한 유형 추론 규칙을 따릅니다.

다소 미묘한 차이점의 범위는 그의 블로그에서 Eric Lippert (C# Language Designer)가 설명합니다.

첫째, 편의성 : Lambdas는 읽고 쓰기가 더 쉽습니다.

둘째, 표현 : Lambdas를 편집 할 수 있습니다 어느 하나 대의원, 또는 발현 트리 (Expression<T> 일부 대의원 유형의 경우 Func<int,bool>). Expression Tree는 LINQ가 프로세스 외 데이터 저장소의 열쇠이므로 더 흥미 롭습니다.

Func<int,bool> isEven = i => i % 2 == 0;
Expression<Func<int,bool>> isEven = i => i % 2 == 0;

진술 기관이있는 Lambda 표현은 대의원에게만 편집 할 수 있습니다. Expression에스:

Action a = () => { Console.WriteLine(obj.ToString()); };
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top