这里的的SingleOrDefault功能是功能的SingleOrDefault提取代码:优化Linq中
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();
}
我想知道是否有任何理由在循环寻找一个以上的元素后,有没有中断语句来防止循环列表的其余部分。无论如何,会发生错误。对于一开始就有一个以上的产品被发现的大列表,我认为它会产生巨大的差异。
你在哪里得到的代码?反编译? – 2013-02-18 16:09:00
如果你看一下没有使用谓词的重载,你会发现它是针对IList进行优化的,只有两个元素。我认为错误的情况下优化并不重要 – adrianm 2013-02-18 16:13:18
@HamletHakobyan是的,我用Resharper。 – Samuel 2013-02-18 16:15:23