Find () та First () видає винятки, як замість цього повернути null?


77

Чи існує метод лямбда-пошуку linq, який повертає 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
}

... мені краще. Або це лише я?

Чи є у вас кращий підхід до цього? (Рішення не повинно повертати нуль, просто краще рішення - це добре)

Відповіді:



53

Відповідь Bala R є правильною, я просто хотів додати частину інформації:

Зверніть увагу, що якщо List<T>містять об'єкти, які не можуть бути нульовими, проект FirstOrDefaultповерне щось інше, ніж null. Компілятор, ймовірно, дасть попередження / помилку про це в операторі if. У такому випадку слід підходити до своєї ситуації так:

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

9
і не забувайте - якщо ваш список буде містити значення за замовчуванням для цього загального типу ( таблиця значень за замовчуванням ), ви не можете сказати, чи існує значення чи не використовує Findметод. Ви повинні використовувати FindIndex, Existsабо Containsв таких ситуаціях.
HuBeZa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.