C'è già uno question on SO about "possible multiple enumerations", ma questa domanda è più specifica.Anche i controlli "IsNullOrEmpty" danno "possibili enumerazioni multiple di avvisi IEnumerable"
perche il seguente metodo, che prende un IEnumerable<string>
come input ed esegue un dato metodo contro ciascuno dei suoi elementi:
public static bool SomeMethod(IEnumerable<string> enumerable)
{
if (enumerable.IsNullOrEmpty())
{
// throw exception.
}
else
{
return (enumerable.All(SomeBooleanMethod));
}
}
Nel codice precedente, IsNullOrEmpty
è solo un metodo di estensione che corre
return (!ReferenceEquals(enumerable, null) || enumerable.Any());
Il problema è che ReSharper mi avvisa di "Possibili enumerazioni multiple di IEnumerable" e davvero non so se questo può effettivamente essere un problema o meno.
Capisco il significato dell'avviso, ma cosa potresti fare davvero in questa situazione se davvero hai bisogno di controllare e lanciare un'eccezione in caso di nullità o vuoto?
Perché si desidera che questo metodo passi se viene passata una sequenza vuota? La semantica di "Fai qualcosa ad ogni membro di questa sequenza (vuota)" è perfettamente ovvia, vero? Inoltre, c'è qualche ragione particolare per cui usi 'ReferenceEquals()' piuttosto che solo '== null'? – AakashM
In effetti non lo è, ma ora immagina che fosse un costruttore. Se non riesco a costruire un oggetto da una sequenza vuota, non dovrei lanciare un'eccezione? – User
Certo, se non c'è davvero nulla che tu possa fare; ma * in generale * direi che le sequenze vuote dovrebbero essere considerate valide quanto le sequenze non vuote. 'Lista <>' è perfettamente felice di costruire da una sequenza vuota, per esempio. Certo che sto parlando solo in generalità; conosci i * dettagli * della tua situazione. – AakashM