27 votes

Erreur "Sequence contains no elements" mais je veux vérifier si elle est nulle.

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 que je ne peux pas vérifier si l'objet User est nul. 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 les exceptions (par exemple, encapsuler dans try..catch et renvoyer true/false dans les parties respectives).

Qu'est-ce qui se passe ici ? Est-ce normal ou y a-t-il quelque chose qui ne va pas avec mon référentiel (indice ? !).

Au fait, ce code fonctionne parfaitement lorsque l'élément que je recherche existe (l'utilisateur est récupéré, etc.). Cela ne fonctionne pas uniquement lorsqu'il n'y a pas de correspondance.

49voto

JaredPar Points 333733

Utilisez FirstOrDefault au lieu de First. Cela retournera null en cas de collection vide.

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

16voto

Tomas Lycken Points 23432

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

8voto

ichiban Points 4568

Utilisez .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