2012-03-28 23 views
-1

我的理解是沒有什麼會發生。使用LINQ查詢語法查詢空集合時會發生什麼?

比如這個代碼:

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

應謹慎爲:

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

或者是安全查詢一個空的集合?

+10

...你試過了嗎? – 2012-03-28 01:24:07

+1

需要1分鐘試試這 – BrokenGlass 2012-03-28 01:26:58

+1

相關... [爲什麼.NET foreach循環拋出NullRefException集合爲空?](http://stackoverflow.com/questions/3088147/why-does-net-foreach -loop-throw-nullrefexception-when-collection-is-null) – 2012-03-28 01:28:50

回答

16

如果使用LINQ查詢它,則null集合將引發異常。你需要檢查null。

但是空收集很好。

需要記住的一點是,對於集合來說,通常被認爲是不好的做法。類似於集合中有空項目,它可能會導致大量的錯誤。

LINQPad Window showing the results of the query

+0

處理這個問題的常見習慣用法是什麼?要檢查它在我的第二個樣本? – OscarRyz 2012-03-28 01:45:58

+7

通常,處理它的最好方法是不允許集合爲空。 如果它是一個類字段,請將其初始化爲一個空集合。 如果它是一個方法參數,請在方法的開頭檢查它是否爲null,如果是,則拋出ArgumentNullException。 假設你不管出於什麼原因都要處理空集合,你可以像以前一樣將foreach封裝在if塊中,或者你可以在foreach塊中使用空的coalesce運算符,就像這個'foreach(var some in(from u in(possibleNullCollection ?? Enumerable.Empty ())))'其中T是項目的類型。 – 2012-03-28 01:51:50