문제

안에 질문 답변 다음 코딩 팁을 찾습니다.

2) 하나의 매개 변수가있는 간단한 람다 :

x => x.ToString() //simplify so many calls

아직 3.0을 사용하지 않은 사람으로서 나는이 팁을 실제로 이해하지 못하지만 흥미로워 보이므로 몇 가지 예제와 함께 전화를 단순화하는 방법에 대한 확장에 감사드립니다.

나는 lambdas를 연구했습니다 생각한다 나는 그들이 무엇을하는지 알고 있지만 나는 5월 완전히 이해하지 못합니다 작은 포장 풀기도 순서대로있을 수 있습니다.

도움이 되었습니까?

해결책

단일 매개 변수가있는 대의원 인스턴스를 만들어야 할 때 Lambda Expressions를 사용하면 해당 대의원 "인라인"을 매우 간결한 방식으로 만들 수 있습니다. 예를 들어, 다음은 목록에서 특정 사람을 이름으로 찾는 코드입니다.

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(p => p.Name == "Jon");

C# 2.0에서는 조금 더 긴 웨스 한 익명 방법을 사용할 수 있지만 ~도 나쁜:

List<Person> list = new List<Person>();
// [..] Populate list here
Person jon = list.Find(delegate(Person p) { return p.Name == "Jon"; });

C# 1.0에서는 전체 추가 방법을 만들어야합니다. 또한 매개 변수화하려면 다른 유형을 만들어야하는 반면 익명 방법과 Lambda 표현식은 실행 환경 (로컬 변수 등)을 캡처하여 클로저처럼 작동합니다.

public Person FindByName(List<Person> list, String name)
{
    return list.Find(p => p.Name == name); // The "name" variable is captured
}

이것에 대해 더 많은 것이 있습니다 폐쇄에 관한 내 기사.

C# 2.0 및 .NET 2.0에서는 대의원을 전달하는 것이 크게 흔하지는 않지만 LINQ의 기초의 대부분이므로 .NET 3.5와 함께 C# 3.0에서 많이 사용하는 경향이 있습니다.

다른 팁

이것은 기본적으로 다음으로 확장됩니다.

private string Lambda(object x) {
  return x.ToString();
}

C# 2.0 익명 방법에 익숙하십니까? 이 두 호출은 동일합니다 (Somemethod가 대의원 등을 수락한다고 가정).

SomeMethod(x => x.ToString());

SomeMethod(delegate (SomeType x) { return x.ToString();});

나는 어느 쪽을 입력할지 알고있다 ...

string delegate(TypeOfX x)
{
  return x.ToString();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top