27 votes

Séquence contient pas d'éléments erreur, mais je veux vérifier la valeur null

J'ai le problème suivant:

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'Utilisateur de l'objet null. Avant de m'y rendre, j'ai un InvalidOperationException disant:"La séquence contient pas d'éléments".

Cela semble vraiment bizarre pour moi, surtout que je ne veux pas d'établir un contrôle de flux avec des exceptions (par exemple, encapsuler dans try..catch et retourner true/false dans les parties respectives).

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

Par ailleurs, ce code fonctionne parfaitement lorsque l'élément que je cherche existe (l'Utilisateur est récupéré etc.). Il ne fonctionne pas quand il n'y a pas de match.

49voto

JaredPar Points 333733

Utilisation FirstOrDefault au lieu de la Première. Elle retourne la valeur null dans la face d'un vide de la collection.

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

16voto

Tomas Lycken Points 23432

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

8voto

ichiban Points 4568

Utiliser .FirstOrDefault() pour éviter cette erreur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X