이 코드는 C#을 상대적으로 새로운 기능을 사용 local function을했다. 이 함수의 유일한 예외는 그 이름입니다. 개발자는 단일 밑줄을 사용했습니다. 따라서, 함수의 이름이 _
, 그래서 호출은 다음과 같습니다 : 당신이 return
문 _
라는 로컬 함수를 호출의 결과를 반환 것을 알고 이제 _()
을, 구문의 나머지는 제자리에 해당 될
// This is a local function
IEnumerable <T> _() {
...
}
(질문에 대한 영업 이익의 코멘트) 우리는 단지 yield return
와 foreach
을 할 수? 복사 한
방법은 차이를 이해하는 열쇠 두 개의 추가 라인 포함 :
public static IEnumerable<T> Pipe<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (action == null) throw new ArgumentNullException(nameof(action));
return _(); IEnumerable <T> _()
{
foreach (var element in source)
{
action(element);
yield return element;
}
}
}
직접 Pipe<T>
방법의 몸으로 yield return
와 foreach
을 넣으면를 인수 검사가 지연 될 것 IEnumerable<T>
결과를 반복하기 시작할 때까지 지역 함수를 사용하면 호출자가 결과를 반복하지 않는 상황에서도 Pipe<T>
이 호출되는 즉시 검사를 수행합니다.
두 줄로 (세미콜론 다음에) 분할하고,'_'의 모든 항목을'enumerate'로 바꿉니다. –
@KevinGosse - C#으로 속도를 높이 지 못하더라도 즉시 취소 할 수 없습니다. 7 ([Local functions] (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions) –
고마워요! 그러나 그 때의 요점은 무엇입니까? '수익률 반환'으로 'foreach'를 수행 할 수 없습니까? –