Проверьте Null ObservableCollection перед тем, как запросить его - PullRequest
2 голосов
/ 15 июня 2011

Достаточно ли хорош этот код:

if (MyCollection.Where(p => p.SomeID == idstring).Any())
{
   selectedval = MyCollection.Where(p => p.SomeID == idstring).FirstOrDefault().MyField;
}

Я сомневаюсь в том, что я делаю один и тот же запрос дважды: сначала для проверки на ноль, а затем для фактического получения данных.

Может бытьЕсть ли лучший способ сделать этот тип вещей?

Ответы [ 2 ]

6 голосов
/ 15 июня 2011

Да.

var item = MyCollection.FirstOrDefault(p => p.SomeID == idstring);
if (item != null)
    selectval = item.MyField;

Это позволяет избежать двойного запроса к коллекции, что, безусловно, будет иметь значение для больших коллекций или если ваша коллекция выполняет запрос к БД.

3 голосов
/ 15 июня 2011

Есть. Вы можете использовать метод FirstOrDefault , который принимает предикат и возвращает ноль, если элемент не найден.

var result = MyCollection.FirstOrDefault(p => p.SomeID == idstring);
if( result != null )
{
    // item was found
}
...