【发布时间】:2010-10-30 15:30:35
【问题描述】:
我很想知道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 语句中?在IEnumerable<T> 上使用foreach 时也应该考虑这一点吗?
附带问题:这个方法到底是做什么的?每当源序列不包含一个项目时,它是否返回后备项目?
【问题讨论】:
标签: c# ienumerable idisposable using-statement ienumerator