为什么一个定义在C#中的本地函数只是调用它的时候了(在IEnumerable的情况下 )[重复]

问题描述 投票:1回答:1

这个问题已经在这里有一个答案:

我有一个看的天才qazxsw pmi-项目的几个扩展方法的实现。我遇到了一个风格习惯,我无法解释。也许你们中的一些可以吗?

它发生,例如在MoreLINQ,下面引用。

那么,为什么作者author本地函数命名Pairwise.cs只是调用它的回报体现在哪里?那岂不是直截了当只是实现的功能非常的_() / yield return?我怀疑是它是与编译器生成的枚举对象断产量的实现方式。但我看不出差别。其实,有一些甚至封-ING发生 - 我认为这是更糟糕的(!?) 编辑:不,它不应该被闭包,因为它不是一个lambda,但当地的功能,这将只是抓住外部范围变量,不管他们是。

yield break
c# performance linq
1个回答
4
投票

这使得参数验证渴望,但允许该方法的其余部分使用 public static IEnumerable<TResult> Pairwise<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TSource, TResult> resultSelector) { if (source == null) throw new ArgumentNullException(nameof(source)); if (resultSelector == null) throw new ArgumentNullException(nameof(resultSelector)); return _(); IEnumerable<TResult> _() { using (var e = source.GetEnumerator()) { if (!e.MoveNext()) yield break; var previous = e.Current; while (e.MoveNext()) { yield return resultSelector(previous, e.Current); previous = e.Current; } } } } 被写入。有了它,你得到的,你叫yield点有关的参数异常。

没有它,你会得到异常时首先调用Pairwise<TSource, TResult>在返回的枚举。

© www.soinside.com 2019 - 2024. All rights reserved.