此代碼可以拋出空指針異常。C#,如何判斷數組的第一個元素是否爲null,何時數組可能沒有元素?
if (myArray[0] != null)
{
//Do Something
}
我該如何測試以確保有一個元素@ index 0
? 當數組爲空時不會引發異常。
此代碼可以拋出空指針異常。C#,如何判斷數組的第一個元素是否爲null,何時數組可能沒有元素?
if (myArray[0] != null)
{
//Do Something
}
我該如何測試以確保有一個元素@ index 0
? 當數組爲空時不會引發異常。
根據您需要檢查什麼,這些條件的某種組合:
if (myArray != null && myArray.Length > 0 && myArray[0] != null)
{
//Do Something
}
一個小的變化我想提出來添的回答是這樣的:
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)
{
// ...
}
檢查數組或列表的'Length'或'Count'(大部分/所有'ICollection's,真的)是O(1)操作,它不需要迭代整個集合。您建議的LINQ'Any()'方法比自己檢查'Length'或'Count'稍慢,但可能更可取,尤其是因爲它適用於任何'IEnumerable
@Tim:你說得對。我很習慣'假設'什麼是實現我正在使用的接口。即使IEnumerable真的是IList LINQ也足夠聰明,可以調用.Count而不是迭代。不過,我更喜歡這裏的一般性。 – n8wrl
屬性應該是快速操作。如果可以計算一個IEnumerable,但需要一段時間,它應該是一個'GetCount()'方法。顯然,這並非總是如此,但它是關於什麼屬性的假設,而不是假設某個接口。 –
首先,你需要檢查是否myArray的爲空。如果不是,則檢查它的元素數:
if (myArray != null && myArray.Length > 0)
{
// myArray has at least one element
}
如果第一個條件是假的,那麼第二個將不檢查,所以當myArray的是空也不例外將被拋出。
首先測試數組是否爲空? – mbeckish
謝謝兄弟 – theIrishUser