我很好奇,想看看SingleOrFallback
方法是如何在MoreLinq實現,發現這是我從來沒有見過的:C#:IEnumerator的<T>在using語句
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;
}
}
爲什麼在using
聲明IEnumerator<T>
?當在IEnumerable<T>
上使用foreach
時,這是應該考慮的事情嗎?
旁邊的問題:這種方法到底做了什麼?當源序列不包含一個項目時是否返回後備項目?
呵呵,是的。由於MaxBy和MinBy方法,將它添加到我們的項目中。當添加這樣的東西時,你總是要檢查是否還有其他東西可以使用;) – Svish 2009-06-02 10:52:58