このメソッドが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>
にあるのはなぜですか? これは、 on anusing
を使用するときに考慮すべきことですか?foreach
IEnumerable<T>
副次的な質問:このメソッドは正確には何をしますか? ソース シーケンスにアイテムが 1 つだけ含まれていない場合は常にフォールバック アイテムを返しますか?