2013-04-18 17 views
6

Quando si utilizza questo codice di seguito, viene visualizzato l'errore di riferimento oggetto, ciò potrebbe essere dovuto al fatto che non esiste alcuna corrispondenza per "spider". La mia domanda è, come verificare la presenza di valore nullo in queste situazioniRiferimento oggetto Non impostato sull'istanza di un errore dell'oggetto durante l'utilizzo di FirstOrDefault

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 

Sto usando questo stesso scenario per condizioni diverse per andare a prendere diversi elementi dalla lista come

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 
String fooDescription = foos.FirstOrDefault(f => f.Sides == "Cake").Description; 

C'è un altro modo per verificare valori nulli.

+0

Inoltre degno di nota: verificare se 'foos' è' null' o meno (meno che non siate assolutamente certi che non può essere 'null') – Nolonar

+1

E 'anche importante sapere che' null' è non è l'unico valore che puoi recuperare da 'FirstOrDefault', dipende dal tipo con cui stai lavorando. http://msdn.microsoft.com/en-gb/library/xwth0h0d(v=vs.80).aspx – Arran

+0

Inoltre a volte è utile ottenere 0 (valore int iniziale) se la query contiene 0 elementi. Può essere fatto in questo modo: 'int fooID = foos.Where (f => f.Bar ==" spider "). Select (f => f.ID) .FirstOrDefault();' –

risposta

8

Nello stesso modo in cui si farebbe normalmente, assegnare una variabile e controllarla.

var foo = foos.FirstOrDefault(f => f.Bar == "spider"); 

if (foo != null) 
{ 
    int fooID = foo.ID; 
} 

Basato sul tuo esempio aggiornato, si avrebbe bisogno di fare questo, invece:

var fooForId = foos.FirstOrDefault(f => f.Bar == "spider"); 
var fooForDescription = foos.FirstOrDefault(f => f.Sides == "Cake"); 

int fooId = fooForId != null ? fooForId.Id : 0; 
string fooDescription = fooForDescription != null ? fooForDescription.Description : null; // or string.Empty or whatever you would want to use if there is no matching description. 
+0

Grazie !! Ma sto utilizzando lo stesso scenario per condizioni diverse per il recupero di elementi diversi dalla lista come int fooID = foos.FirstOrDefault (f => f.Bar == "spider") .ID; String fooDescription = foos.FirstOrDefault (f => f.Sides == "Cake"). Descrizione; Esiste un altro modo per verificare i valori nulli. – Mohan

+2

@Mohan allora dovresti aggiornare il tuo esempio in modo da avere una mezza possibilità di capire cosa stai cercando di ottenere. –

1

Si consiglia inoltre di utilizzare DefaultIfEmpty metodo di estensione per bevaiour se non ci sono elementi di corrispondenza. codice successivo mostra l'uso

string[] foos = {"tyto", "bar"}; 

var res = foos.Where(s => s.Length == 2) 
       .DefaultIfEmpty("default") 
       .First() 
       .Length; 

Console.WriteLine (res); //will print the length of default, which is 7 
Problemi correlati