0

私はC#が初めてで、配列を見ています。

への呼び出しが(Object reference not .....)i.GetType()になるのはなぜですか?NullReferenceException

       int[][] myJagArray = new int[5][];
       foreach (int[] i in myJagArray) { Console.WriteLine(i.GetType()); }

どうもありがとう。

4

3 に答える 3

4

C# では、値の型 ( などInt32) はゼロ化された値に初期化されます。例えば:

int[] foo = new int[3];

3 つのゼロの配列を作成します。印刷:

Console.WriteLine(foo[1].GetType().Name);

あなたに与えるでしょうInt32

ただし、Array 型は参照型です。これらはデフォルトで null に初期化されます。

そのため、int[5][]配列であるの最初の項目を参照すると、nullまだ初期化されていないため、 が取得されます。これを呼び出そうとするとGetType()NullReferenceException.

于 2013-02-07T17:42:44.517 に答える
2

2番目のディメンションがnullであるため、このエラーが発生します。

これを試して:

int[][] myJagArray = new int[5][];
myJagArray[0] = new int[] { 1, 2, 3 };

foreach (int[] i in myJagArray) 
{
    if (i != null)
        Console.WriteLine(i.GetType());
    else
        Console.WriteLine("null");
}

この結果は次のようになります。

System.Int32[]
null
null
null
null

次の行を追加したため、最初の行はnullに等しくなりません。

myJagArray[0] = new int[] { 1, 2, 3 };
于 2013-02-07T17:37:17.543 に答える
1

default値をnullとして取得するジャグ配列を宣言しました

したがって、これらの配列を次のように初期化する必要があります。

myJagArray[0] = new int[] { 1, 5, 7, 9 }; // put whatever values you want here
myJagArray[1] = new int[] { 0, 4, 6 };
myJagArray[2] = new int[] { 11, 22 };
........
myJagArray[4] = new int[] {12,23,45};
于 2013-02-07T17:48:32.140 に答える