2013-04-18 2 views
6

このコードを使用すると、オブジェクト参照エラーが発生します。これは、「スパイダー」に一致しない可能性があります。私の質問はオブジェクト参照FirstOrDefaultの使用中にオブジェクトエラーのインスタンスに設定されていません

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 

私は

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 
String fooDescription = foos.FirstOrDefault(f => f.Sides == "Cake").Description; 

のようにリストから別のアイテムを取得するためにさまざまな条件のために、この同じシナリオを使用している他の方法があり、これらの状況では、null値をチェックする方法であり、ヌル値をチェックします。

+0

注目に値するを示しています。それはnull'なのでは 'ことを知ることも重要です – Nolonar

+1

(あなたが絶対確実でない限り、それは' null'なのですることはできません)foos'は 'null'なのでかではありません'かどうかをチェックしますあなたが 'FirstOrDefault'から返す唯一の値ではなく、あなたが作業しているタイプによって異なります。 http://msdn.microsoft.com/en-gb/library/xwth0h0d(v=vs.80).aspx – Arran

+0

また、クエリに0個の要素が含まれている場合、0(デフォルトのint値)を取得することも便利です。 (f => f.ID).FirstOrDefault(); 'を選択してください –

答えて

8

通常と同じ方法で、変数を割り当ててチェックします。

var foo = foos.FirstOrDefault(f => f.Bar == "spider"); 

if (foo != null) 
{ 
    int fooID = foo.ID; 
} 

更新した例に基づいて、あなたの代わりにこれを実行する必要があります:

var fooForId = foos.FirstOrDefault(f => f.Bar == "spider"); 
var fooForDescription = foos.FirstOrDefault(f => f.Sides == "Cake"); 

int fooId = fooForId != null ? fooForId.Id : 0; 
string fooDescription = fooForDescription != null ? fooForDescription.Description : null; // or string.Empty or whatever you would want to use if there is no matching description. 
+0

ありがとう!!しかし、私はこの同じシナリオを、異なる項目をリストからフェッチするためのさまざまな条件に使用しています。 int fooID = foos.FirstOrDefault(f => f.Bar == "spider")。文字列fooDescription = foos.FirstOrDefault(f => f。== "Cake")。 null値をチェックする他の方法はありませんか? – Mohan

+2

@モハンあなたが達成しようとしていることを理解する機会が半分になるように、例を更新してください。 –

1

あなたはまた、一致する要素が存在しない場合bevaiourためDefaultIfEmpty拡張メソッドを使用することをお勧めします。次のコードは、使用も

string[] foos = {"tyto", "bar"}; 

var res = foos.Where(s => s.Length == 2) 
       .DefaultIfEmpty("default") 
       .First() 
       .Length; 

Console.WriteLine (res); //will print the length of default, which is 7 
関連する問題