2012-05-09 80 views

回答

8

根據您需要檢查什麼,這些條件的某種組合:

if (myArray != null && myArray.Length > 0 && myArray[0] != null) 
{ 
    //Do Something 
} 
1

一個小的變化我想提出來添的回答是這樣的:

if (myArray != null && myArray.Any() && myArray[0] != null) 
{ 
    //Do Something 
} 

。任何檢查,看看是否至少有1個,而不必遍歷整個集合。此外,此版本可與任何IList < T> -implemtor配合使用。

我知道在.NET的某些未來版本中可能會有LINQ/IEnumerable版本的.IsNullOrEmpty,這在這裏將非常方便。哎呀,你可以自己實現它作爲擴展方法!

public static class MyExtensions 
{ 
    public static bool IsNullOrEmpty<T>(this IEnumerable<T> source) 
    { 
     return (source == null || !source.Any()); 
    } 
} 

那麼你的測試變得

if (!myArray.IsNullOrEmpty() && myArray[0] != null) 
{ 
    // ... 
} 
+0

檢查數組或列表的'Length'或'Count'(大部分/所有'ICollection's,真的)是O(1)操作,它不需要迭代整個集合。您建議的LINQ'Any()'方法比自己檢查'Length'或'Count'稍慢,但可能更可取,尤其是因爲它適用於任何'IEnumerable '。 –

+0

@Tim:你說得對。我很習慣'假設'什麼是實現我正在使用的接口。即使IEnumerable真的是IList LINQ也足夠聰明,可以調用.Count而不是迭代。不過,我更喜歡這裏的一般性。 – n8wrl

+0

屬性應該是快速操作。如果可以計算一個IEnumerable,但需要一段時間,它應該是一個'GetCount()'方法。顯然,這並非總是如此,但它是關於什麼屬性的假設,而不是假設某個接口。 –

1

首先,你需要檢查是否myArray的爲空。如果不是,則檢查它的元素數:

if (myArray != null && myArray.Length > 0) 
{ 
    // myArray has at least one element 
} 

如果第一個條件是假的,那麼第二個將不檢查,所以當myArray的是空也不例外將被拋出。

相關問題