Find() и First () бросает исключения, как вернуть null вместо этого?


есть ли метод поиска linq lambda, который возвращает null, вместо того, чтобы выдавать исключение при поиске списка?

мое текущее решение-это что-то вроде: (чтобы избежать исключения из перебрасываясь)

if (list.Exists(x => x.Foo == Foo))
{
    var listItem = list.Find(x => x.Foo == Foo);
}

Он просто чувствует себя неправильно, чтобы повторить выражение.

что-то вроде ...

var listItem = list.Find(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}

... мне уже лучше. Или это только я?

у тебя есть лучший подход? (Решение не должно возвращаться null, просто лучшее решение хорошо)

2 52

2 ответа:

var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}

ответ Bala R правильный, я просто хотел добавить часть информации:

обратите внимание, что если List<T> содержит объекты, которые по дизайну не могут быть null,FirstOrDefault вернет что-то другое, чем null. Компилятор, вероятно, даст предупреждение/ошибку об этом в операторе if. В этом случае вы должны подойти к своей ситуации следующим образом:

List<MyObjectThatCannotBeNull> list;
var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (!listItem.Equals(default(MyObjectThatCannotBeNull)))
{
    //Do stuff
}