2016-03-09 5 views
-4

Я пытаюсь найти элемент по имени элемента.InvalidOperationException, когда первый не найден

Item item = Shop.Items.Values.First(i => i.Name.Contains(partOfName)) 

я ожидал, что делать дальше

if (item == null) // if not found 
{ 
    // not found code 
} 

... но когда элемент не найден, я получил InvalidOperationException.

Первое, что приходит на ум

try 
{ 
    Item item = Shop.Items.Values.First(i => i.Name.Contains(partOfName)) 
} 
catch(InvalidOperationException ex) 
{ 
    // not found code 
} 

Что такое лучший способ справиться с этим? Может, не попробовать/поймать?

EDIT. Решение:

Item item = Shop.Items.Values.FirstOrDefault(i => i.Name.Contains(partOfName)) 

if (item == null) // if not found 
{ 
    // not found code 
} 
+0

Первый способ очень прост в создании, поэтому создайте его самостоятельно – thijmen321

+0

Вы можете использовать 'FirstOrDefault'. –

+3

Из документации «Enumerable.First»: «Метод« Первый »генерирует исключение, если в источнике не найден соответствующий элемент. Вместо этого, чтобы вернуть значение по умолчанию, когда не найдено ни одного совпадающего элемента, используйте метод FirstOrDefault. " –

ответ

1

First выбросит. Возврат default<T>. Для ссылочных типов, то есть null.

 Смежные вопросы

  • Нет связанных вопросов^_^