Последовательность не содержит ошибок элементов, но я хочу проверить на нулевое значение - PullRequest
31 голосов
/ 03 июня 2009

У меня следующая проблема:

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

Проблема в том, что я не могу проверить объект User на ноль. Прежде чем попасть туда, я получаю InvalidOperationException, говорящий " Последовательность не содержит элементов ".

Это кажется мне очень странным, тем более что я не хочу устанавливать поток управления с исключениями (например, инкапсулировать в try..catch и возвращать true / false в соответствующих частях).

Что здесь происходит? Это нормально или что-то не так с моим репозиторием (подсказка?!)

Кстати, этот код прекрасно работает , когда элемент, который я ищу, существует (пользователь извлекается и т. Д.). Он не работает только при отсутствии совпадений.

Ответы [ 3 ]

61 голосов
/ 03 июня 2009

Используйте FirstOrDefault вместо First. Это возвратит нуль перед лицом пустой коллекции.

IRepository<User> = new UserRepository();
User user = userRepository.FirstOrDefault(u => u.Name == userName);
23 голосов
/ 03 июня 2009

Попробуйте изменить .First() на .FirstOrDefault().

12 голосов
/ 03 июня 2009

Используйте .FirstOrDefault() для предотвращения этой ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...