내 프로젝트에 다음 코드 스 니펫이 있습니다. 나는 람다 식을 처음 사용한다. 나는 그것에 대해 약간의 생각을 가지고 있으며 또한 사용을 시작했습니다. 하지만 아래 코드가 어떻게 작동하는지 이해할 수 없습니다. 특별히주어진 코드 스 니펫에서 작동하는 람다 식 표현식은 무엇입니까
NotifyIntrenal(notification, callback, changedTypes => ..
지금 여기 changedTypes
방법 NotifyIntrenal
의 매개 변수 중의 하나이다. 우리는 이성적인 방법을 사용하여 그 가치를 도출합니다.
코드를 볼 경우 changedTypes에 값을 지정하지 않으므로 코드 if (changedTypes == null)
은 이 항상 true
이어야합니다. 하지만 디버깅 할 때는 그렇지 않습니다.
누군가가 나를 어떻게 설명 할 수 있습니까?
private void Notify(Notification notification)
{
var nameDto = GetNameDto();
foreach (var subscription in _subscriptionsDictionary)
{
var callback = subscription.Key;
var subscribedTypes = subscription.Value;
NotifyIntrenal(notification, callback, changedTypes =>
{
if (changedTypes == null)
return subscribedTypes;
if (!changedTypes.Any())
return subscribedTypes;
return changedTypes.Intersect(subscribedTypes);
}, nameDto);
}
}
감사 & 감사
람다 식은 * 함수 *이고, changedType은 (아마도 NotifyIntrenal 내에서) 호출자가 제공 한 인수입니다. [this duplicate] (http://stackoverflow.com/questions/167343/c-sharp-lambda-expressions-why-should-i-use-them)를 참조하십시오. –
NotifyIntrenal 코드 추가 – Steve
위의 람다에 무슨 일이 일어나는지 알지만 실제로 동일한 코드를 메서드에 두는 것의 이점이 있습니까? 그 외의 것이 없다면 코드 클리너를 만드는 것처럼 보일 것입니다. 또는 그 문제에 대해, NotifyInternal() 함수는 그 안에 동일한 논리를 가질 수 있습니다. 이런 방식으로 성능 이점이 있습니까? – jpaugh78