我很好奇看看MoreLinq中的SingleOrFallback
方法是如何实现的,结果发现了一些之前没见过的东西:
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
语句中?当使用IEnumerable<T>
上的foreach
时,这是否应该考虑?副问题:这个方法到底是做什么的?它是否在源序列不包含恰好一个项目时返回回退项目?