2009-06-03 5 views
31

J'ai le problème suivant:séquence ne contient aucune erreur d'éléments, mais je veux vérifier null

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; 
} 

Le problème est maintenant, que je ne peux pas vérifier l'objet utilisateur pour null. Avant d'y arriver, j'obtiens un InvalidOperationException en disant "La séquence ne contient aucun élément".

Cela me semble vraiment bizarre, d'autant plus que je ne veux pas établir de flux de contrôle avec des exceptions (par exemple encapsuler dans try..catch et retourner vrai/faux dans les parties respectives).

Que se passe-t-il ici? Est-ce normal ou est-il quelque chose de mal avec mon respository (indice ?!)

Soit dit en passant, ce code fonctionne parfaitement lorsque l'élément que je suis à la recherche existe (l'utilisateur est récupéré, etc.). Cela ne marche pas quand il n'y a pas de correspondance.

Répondre

60

Utilisez FirstOrDefault au lieu de First. Cela renverra null dans le visage d'une collection vide.

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

@Tomas, je me suis fait à l'avance, mais je vous fait un poste de modifier réponse à inclure en fait un exemple de code. Le deuxième montage était à 2 secondes de retard :) – JaredPar

+0

C'est vrai Jared est entré en premier: D (de 2 secondes ... il a montré Jared il ya 48 secondes et Tomas il y a 46 secondes). Merci messieurs !!!! – Alex

+0

+1 pour nananabooboo commentaire: D – Gent

22

Essayez de changer .First() à .FirstOrDefault().

12

Utilisez .FirstOrDefault() pour éviter cette erreur

Questions connexes