这个问题已经在这里有一个答案:
我有一个看的天才qazxsw pmi-项目的几个扩展方法的实现。我遇到了一个风格习惯,我无法解释。也许你们中的一些可以吗?
它发生,例如在MoreLINQ,下面引用。
那么,为什么作者author本地函数命名Pairwise.cs只是调用它的回报体现在哪里?那岂不是直截了当只是实现的功能非常的_()
/ yield return
?我怀疑是它是与编译器生成的枚举对象断产量的实现方式。但我看不出差别。其实,有一些甚至封-ING发生 - 我认为这是更糟糕的(!?)
编辑:不,它不应该被闭包,因为它不是一个lambda,但当地的功能,这将只是抓住外部范围变量,不管他们是。
yield break
这使得参数验证渴望,但允许该方法的其余部分使用 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>
在返回的枚举。