Non lasciate che la lista sia nulla
verificare che l'oggetto è sempre in uno stato valido. Assicurandosi che l'elenco non sia mai nullo, non è mai necessario verificare che l'elenco sia nullo.
public class MyClass
{
private readonly IEnumerable<int> ints;
public MyClass(IEnumerable<int> ints)
{
this.ints = ints;
}
public IEnumerable<int> IntsGreaterThan5()
{
return this.ints.Where(x => x > 5);
}
}
Anche se questo elenco fosse vuoto, si otterrebbe comunque uno IEnumerable<int>
valido.
Max e Min Sovraccarichi con i tipi Nullable
Che ancora non risolve il "Max" e problemi "min" però. C'è un sovraccarico di Max e Min che prendono i selettori. Quelle sovraccarichi selettore può tornare int nullable, quindi il metodo di massima diventa questo:
this.ints.Max(x => new int?(x));
Pertanto, si esegue Max e controllare per vedere se hai ottenuto un valore nullo o un intero indietro. Ecco!
Altre opzioni
Metodi di estensione personalizzata
si potrebbe anche scrivere i propri metodi di estensione.
public static MinMaxHelper()
{
public static int? MaxOrDefault(IEnumerable<int> ints)
{
if(!ints.Any())
{
return null;
}
return ints.Max();
}
public static int MaxOrDefault(IEnumerable<int> ints, int defaultValue)
{
if(!ints.Any())
{
return defaultValue;
}
return ints.Max();
}
}
Override Linq Metodi di estensione
E Infine, ricordate che la configurazione in metodi di estensione LINQ può essere sovrascritto con i propri metodi di estensione con firme di corrispondenza. Pertanto, è possibile scrivere un metodo di estensione per sostituire .Where (...) e .Max (...) per restituire null (o un valore predefinito) invece di generare un'eccezione ArgumentNullException se Enumerable è null.
fonte
2011-11-09 16:52:35
IMHO, oggetti come un elenco non devono mai essere nulli. Inizialmente li inizializzo se sono membri della classe e, se vengono restituiti da una funzione della mia creazione, mi assicuro che la funzione restituisca una lista vuota anziché null. –
Possibile duplicato della risposta all'indirizzo: http://stackoverflow.com/questions/41319/checking-if-a-list-is-empty-with-linq – VS1
È sempre possibile scrivere i propri metodi di estensione per utilizzare le azioni come Where() o Max() che includeranno il test Null e Count prima di utilizzare il metodo di estensione effettivo. – Paul