LINQ Single() Исключение для 0 или нескольких элементов
У меня есть набор элементов IEnumberable
. Я использую .Single()
для поиска конкретного объекта в коллекции.
Я выбираю использовать Single()
, потому что должен быть только один конкретный элемент. Однако, если этого не существует, тогда мне нужно его создать и добавить в коллекцию.
Моя проблема в том, что Single()
выдает ту же ошибку, если нет элемента, соответствующего предикату, или если есть несколько элементов. Моя идея заключалась в том, чтобы вызвать вызов Single()
внутри попытки и поймать исключение, добавить элемент, а затем продолжить. Однако, поскольку оба сценария бросают InvalidOperationException
, как я могу определить, не связано ли это с элементами или несколькими элементами?
Я знаю, что могу использовать First()
, но это не гарантирует, что должно быть только одно (без дополнительной работы).
Я мог бы также использовать Count()
перед вызовом Single()
, но это просто подрывает точку Single()
Ответы
Ответ 1
Вы хотите SingleOrDefault()
"или по умолчанию" на самом деле означает, что он возвращает значение null (для ссылочных типов) или независимо от значения по умолчанию для типа без ссылки. Вам нужно будет создать новый объект, чтобы занять его место.
Ответ 2
Я бы не рекомендовал использовать try/catch в этом сценарии, потому что использование исключений для принятия логических решений является дорогостоящим ресурсом.
Я бы рекомендовал использовать SingleOrDefault()
и проверить, является ли результат нулевым. Если это. Сделайте свое творение.