Ecco il codice estratto della funzione SingleOrDefault:ottimizzazione in funzione SingleOrDefault di 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();
}
Mi chiedo di sapere se v'è alcuna ragione per cui dopo aver trovato più di un elemento nel ciclo, non ci non è un'istruzione break per impedire il loop del resto della lista. In ogni caso, si verificherà un errore. Per una grande lista in cui si trova più di un articolo all'inizio, penso che sarebbe una grande differenza.
Dove si ottiene il codice? Decompilato uno? –
Se osservate il sovraccarico non prendendo un predicato vedrete che è ottimizzato per IList e solo prendendo due elementi. Presumo che il caso dell'errore non sia importante per ottimizzare – adrianm
@HamletHakobyan Sì, ho usato Resharper. – Samuel