람다 식은 _=> expr무슨 뜻인가요?
_람다에 대한 입력 의 목적은 무엇입니까 ?
예:
int count = 0;
list.ForEach(_ => count += 1);
list이다 IEnumerable<T>, 그들은 수 (그리고해야한다) 만 사용했다sum = list.Count();
람다 식은 _=> expr무슨 뜻인가요?
_람다에 대한 입력 의 목적은 무엇입니까 ?
예:
int count = 0;
list.ForEach(_ => count += 1);
list이다 IEnumerable<T>, 그들은 수 (그리고해야한다) 만 사용했다sum = list.Count();
답변:
매개 변수에 신경 쓰지 않을 때 사용되는 규칙입니다.
_에서 패턴 일치의 와일드 카드 문자입니다. 그것은 기본적으로 "상관 없어, 나는 항상 이것이 일치하기를 원한다"는 의미입니다. 이 "I do n't care"는 당신이 신경 쓰지 않는 것들을 명명 할 때 이어지고, 거기에서 다른 프로그래밍 언어로 넘쳐납니다. 예를 들어, Ruby _에서는 특별한 의미가 전혀 없지만 이 예제에서와 같은 의미로 Ruby에서도 사용됩니다 .
유용한 이름은 아니지만 매개 변수 이름이지만, 컴파일 할 코드를 얻기 위해 표현식 에 매개 변수 가 있음을 지정해야 할 때 일반적으로 사용되는 이름입니다 (일부 규칙에 따라) .하지만 실제로는 신경 쓰지 않습니다. 그래서 당신은 그것을 무시할 것입니다.
기본적으로 C #의 유효한 식별자가 구성하는 구문을 악용하고 있으며 식별자는 밑줄로 시작할 수 있고 다른 것은 포함 할 수 없으므로 매개 변수 이름 일뿐입니다.
다음과 같이 쉽게 작성할 수 있습니다.
var _ = 10;
Thread t= new Thread(()=>doSomething(x,y)); t.start();
_유효한 변수 이름입니다. 그들은 단지 _변수로 사용 하고 있습니다.
나는 또한 _ => _.method()지시의인지 적 무게를 감소시키기 때문에 한 줄의 메서드 호출 람다 에 대한 사용을 두 번째로 사용 합니다. 특히 제네릭을 사용할 때 작성 x => x.method()하면 "이 'x'는 무엇입니까? 공간의 좌표입니까?"라는 순간적인 고려 사항이 추가됩니다.
다음 경우를 고려하십시오.
Initialize<Client> ( _=>_.Init() );
Generics 호출과 함께 사용되며이 경우 밑줄은 "우회 기호"로 작동합니다. 중복을 방지하고 인수의 유형이 명확하고 사용에서 유추 될 수 있음을 정의합니다. 이는 유형 선언을 반복하지 않도록 'var'를 사용할 때와 같습니다. client=>client.Init()여기에 쓰면 의미를 추가하지 않고 지침이 길어집니다.
분명히 이것은 설명 적으로 이름을 지정해야하는 메서드에 전달할 매개 변수에는 적용되지 않습니다. 예 :Do( id=>Log(id) );
람다 식별자가 제네릭 정의에서 연결이 끊어지기 때문에 한 줄 대신 코드 블록을 사용하는 경우 메서드 호출에 대한 단일 밑줄 매개 변수 사용은 거의 정당화 할 수 없습니다. 일반적으로 동일한 식별자를 재사용하려면 설명이 포함 된 이름을 지정하십시오.
요점은, 특히 익명 대리자 생성을 단순화하기 위해 만들어진 람다의 경우, 자세한 내용은 명확성을 위해서만 정당화 될 수 있다는 것입니다. 어쨌든 가독성과 간결함의 균형을 유지하면서 상식을 사용해야합니다. 기호가 실제 기능에 대한 "후크"일 경우 하나의 문자 식별자는 완벽합니다. For-loops와 "i"및 "j"문자가 인덱서로 사용되는 경우입니다.
Do(id => Log(id))는 Do(Log).