私はC#が初めてで、配列を見ています。
への呼び出しが(Object reference not .....)i.GetType()
になるのはなぜですか?NullReferenceException
int[][] myJagArray = new int[5][];
foreach (int[] i in myJagArray) { Console.WriteLine(i.GetType()); }
どうもありがとう。
私はC#が初めてで、配列を見ています。
への呼び出しが(Object reference not .....)i.GetType()
になるのはなぜですか?NullReferenceException
int[][] myJagArray = new int[5][];
foreach (int[] i in myJagArray) { Console.WriteLine(i.GetType()); }
どうもありがとう。
C# では、値の型 ( などInt32
) はゼロ化された値に初期化されます。例えば:
int[] foo = new int[3];
3 つのゼロの配列を作成します。印刷:
Console.WriteLine(foo[1].GetType().Name);
あなたに与えるでしょうInt32
。
ただし、Array 型は参照型です。これらはデフォルトで null に初期化されます。
そのため、int[5][]
配列であるの最初の項目を参照すると、null
まだ初期化されていないため、 が取得されます。これを呼び出そうとするとGetType()
、NullReferenceException
.
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 };
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};