web-dev-qa-db-ja.com

Find()とFirst()は例外をスローしますが、代わりにnullを返す方法は?

リストを検索するときに、例外をスローする代わりにnullを返すlinq lambda検索メソッドはありますか?

私の現在の解決策は次のようなものです:(例外がスローされるのを避けるため)

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を返す必要はありません。より良いソリューションが良いだけです)

61
Ben Galler
var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}
119
Bala R

Bala Rの答えは正しいです。情報を追加したかっただけです。

List<T>には、設計上nullにできないオブジェクトが含まれています。FirstOrDefaultnull以外のものを返します。コンパイラは、ifステートメントでこれについて警告/エラーを出す可能性があります。その場合、次のように状況にアプローチする必要があります。

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