fand ich (grob) diesen Code in das Enumerable.Single
Verfahren, während es mit einigen Decompiler Inspektion:Warum wird Single() nicht direkt zurückgegeben, wenn mehr als ein Element gefunden wird?
foreach (TSource current in source)
{
if (predicate(current))
{
result = current;
num += 1L;
}
}
if (num > 1L)
{
throw Error.MoreThanOneMatch();
}
Wie Sie sehen können, ist es über alle Elemente Schleifen vor dem Wurf. Warum bricht es nicht wenn num > 1
?
Vielen Dank für diese Frage. Es ist wirklich interessant, warum sich das LINQ-Team dafür entschieden hat, hier bis zum Ende zu laufen. –
Vince, gibt es einen Unterschied zwischen Enumerable.Single und Queryable.Single Implementierungen in diesem Teil? –
Wo haben Sie diese Implementierung gefunden? Mit Reflector sehe ich etwas völlig anderes, das * sofort * zurückkehrt, wenn ein zweites Element gefunden wird. –