SingleOrDefault関数から抽出されたコードは次のとおりです。
public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) {
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
TSource result = default(TSource);
long count = 0;
foreach (TSource element in source) {
if (predicate(element)) {
result = element;
checked { count++; }
}
}
switch (count) {
case 0: return default(TSource);
case 1: return result;
}
throw Error.MoreThanOneMatch();
}
ループ内で複数の要素を見つけた後、リストの残りの部分のループを防ぐためのbreakステートメントがない理由があるかどうか知りたいです。とにかく、エラーが発生します。最初に複数のアイテムが見つかった大きなリストの場合、それは大きな違いを生むと思います。