2009-06-03 12 views
31

Ho il seguente problema:sequenza non contiene elementi di errore ma voglio verificare la presenza di nulla

public Boolean Exists(String userName) 
{ 
    IRepository<User> = new UserRepository(); 
    User user = userRepository.First(u => u.Name == userName); 

    if (user == null) return false; 

    // Exists! 
    return true; 
} 

Il problema è ora, che non riesco a controllare l'oggetto utente per nulla. Prima di arrivare, ottengo un InvalidOperationException dicendo "La sequenza non contiene elementi".

Questo mi sembra davvero strano, soprattutto perché non voglio stabilire il flusso di controllo con le eccezioni (ad esempio, incapsulare in try..catch e return true/false nelle rispettive parti).

Cosa sta succedendo qui? È questo normale o c'è qualcosa di sbagliato con la mia respository (suggerimento ?!)

Tra l'altro, questo codice funziona perfettamente quando l'elemento che sto cercando esiste (l'utente viene recuperato, ecc). Funziona solo quando non c'è corrispondenza.

risposta

60

Utilizzare FirstOrDefault anziché First. Questo restituirà null di fronte a una collezione vuota.

IRepository<User> = new UserRepository(); 
User user = userRepository.FirstOrDefault(u => u.Name == userName); 
+1

@Tomas, in realtà ho avuto in di fronte a voi, ma ho fatto un Modifica Messaggio risposta a includere in realtà un esempio di codice. La seconda modifica è stata 2 secondi dietro :) – JaredPar

+0

Questo è vero, Jared è entrato per primo: D (di 2 secondi .. mostrava Jared 48 secondi fa e Tomas 46 secondi fa). Grazie signori !!!! – Alex

+0

+1 per il commento di nananabooboo: D – Gent

22

provare a cambiare .First() a .FirstOrDefault().

12

Usa .FirstOrDefault() per impedire che l'errore

Problemi correlati