1

此代码可能会引发空指针异常。

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

我如何测试以确保有一个元素 @index 0?数组为空时不抛出异常。

4

3 回答 3

8

根据您需要检查的内容,这些条件的某些组合:

if (myArray != null && myArray.Length > 0 && myArray[0] != null)
{
    //Do Something
}
于 2012-05-09T20:18:13.377 回答
1

我将对蒂姆的回答做出的一个小改动是:

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

.Any 检查是否至少有 1 个,而无需遍历整个集合。此外,此版本适用于任何 IList<T>-实现器。

我知道在未来的 .NET 版本中可能会有 .IsNullOrEmpty 的 LINQ/IEnumerable 版本,这在这里非常方便。哎呀,您可以自己将其实现为扩展方法!

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

然后你的测试变成

if (!myArray.IsNullOrEmpty() && myArray[0] != null)
{
    // ...
}
于 2012-05-09T20:22:09.567 回答
1

首先,您需要检查myArray是否为空。如果不是,请检查它的元素计数:

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

如果第一个条件为假,则不会检查第二个条件,因此当myArray为 null 时不会抛出异常。

于 2012-05-09T20:22:11.733 回答