1

このコードは、nullポインター例外をスローする可能性があります。

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

要素@インデックスがあることを確認するためにどのようにテストできます0か?配列が空のときに例外をスローしません。

4

3 に答える 3

8

何をチェックする必要があるかに応じて、これらの条件のいくつかの組み合わせ:

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

ティムの答えに私が加える小さな変更の1つはこれです:

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

。コレクション全体を反復処理することなく、少なくとも1つあるかどうかを確認します。また、このバージョンは、任意のIList<T>-implemtorで動作します。

.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がnullかどうかを確認する必要があります。そうでない場合は、要素数を確認してください。

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

最初の条件がfalseの場合、2番目の条件はチェックされないため、myArrayがnullの場合、例外はスローされません。

于 2012-05-09T20:22:11.733 に答える