2012-03-28 5 views
-1

私の理解は何も起こりません。例えばnullコレクションがLINQクエリ構文で照会されるとどうなりますか?

このコード:

foreach (var some in (from u in possiblyNullCollection)) 
{ 
    // 
} 

として守られるべき:

if (possiblyNullCollection != null) 
{ 
    foreach (var some in (from u in possiblyNullCollection)) 
    { 
    // 
    } 
} 

それともNULLのコレクションを照会しても安全ですか?

+10

...試しましたか? –

+1

1分でこれを試してみましょう – BrokenGlass

+1

関連[[コレクションがnullの場合、.NET foreachループがNullRefExceptionをスローするのはなぜですか]](http://stackoverflow.com/questions/3088147/why-does-net-foreach -loop-throw-nullrefexception-when-collection-is-null) –

答えて

16

nullコレクションは、LINQを使用してクエリを実行すると例外がスローされます。 nullをチェックする必要があります。

しかし、空のコレクションはうまくいきます。

何かを覚えておいてください。一般に、コレクションがnullになるのは悪い習慣とみなされます。コレクションにヌルアイテムがあるのと同様に、バグが多い可能性があります。

LINQPad Window showing the results of the query

+0

これを処理する一般的なイディオムは何ですか? 2番目のサンプルと同じようにチェックするには? – OscarRyz

+7

通常、これを処理する最善の方法は、コレクションがnullで始まらないようにすることです。 クラスフィールドの場合は、空のコレクションに初期化します。 メソッドのパラメータの場合は、メソッドの先頭でnullをチェックし、存在する場合はArgumentNullExceptionをスローします。 何らかの理由でnullコレクションを処理しなければならないと仮定した場合、foreachをifブロックのようにラップするか、foreachブロック内でヌル併合演算子をこの 'foreach(var some in(from (おそらくNullCollection ?? Enumerable.Empty ()))) 'Tはアイテムのタイプです。 –

関連する問題