2017-02-20 7 views
-2

もしi = {1,2}なら問題ありません。私が探しているものが見つからない場合、Linq式がクラッシュする

iId = 3(またはその他のもの)の場合、.First()がクラッシュするのはなぜですか。

public class C { public int ID, public string nam } 
int i = 3; 
C c = new List<C>; 
c.Add(new C{ID = 1, nam="hello" }); 
c.Add(new C{ID = 2, nam=world" }); 
C r = c.First(e => e.ID.Equals(i)); 

例外は次のとおりです。

と、InvalidOperationExceptionがシーケンスが一致する要素が含まれていない

ユーザーコードで未処理だった

私は表現がしなければならないだろう少なくともがあると思うだろうnullを返します。 代わりにクラッシュしました。
それは私には意味がありません。 返されたnullは私には意味をなさないでしょう。

これを回避するにはどうしますか?あなたのベストプラクティスは何ですか?

答えて

0

私は1次回に同意する傾向がある()もう少しやさしいことができますが、使用して、あなたが望む結果を得ることができます:あなたは任意のより多くの情報/例が必要な場合は

はここで、FirstOrDefaultへMDSNリンクです。 FirstOrDefault()

When to use .First and when to use .FirstOrDefault with LINQ?

2

First(e => e.ID.Equals(i))からFirstOrDefault(e => e.ID.Equals(i))に変更すると、アプリがクラッシュするのではなく、どのように表示されるかを処理できるヌルが得られます(default(C)はnullです。参照型のデフォルトです)。
https://msdn.microsoft.com/en-us/library/bb340482(v=vs.110).aspx

関連する問題