我很想知道该SingleOrFallback
方法是如何在MoreLinq中实现的,并发现了一些我以前从未见过的东西:
public static T SingleOrFallback<T>(this IEnumerable<T> source, Func<T> fallback)
{
source.ThrowIfNull("source");
fallback.ThrowIfNull("fallback");
using (IEnumerator<T> iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
{
return fallback();
}
T first = iterator.Current;
if (iterator.MoveNext())
{
throw new InvalidOperationException();
}
return first;
}
}
为什么IEnumerator<T>
在using
声明中?foreach
这也是在使用on an时应该考虑的事情IEnumerable<T>
吗?
附带问题:这种方法究竟做了什么?每当源序列不包含一个项目时,它是否返回后备项目?