在多维数组上调用的C#GetType()导致NullReferenceException

时间:2013-02-07 17:31:50

标签: c# arrays multidimensional-array nullreferenceexception

我是C#的新手并且正在研究数组。

我想知道为什么调用i.GetType()导致NullReferenceException(对象引用不是.....)?

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

非常感谢。

3 个答案:

答案 0 :(得分:4)

在C#中,值类型(例如Int32)将初始化为其零值。例如:

int[] foo = new int[3];

将创建一个包含3个零的数组。印刷:

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

会给你Int32

但是,Array类型是引用类型。默认情况下,它们初始化为null。

因此,当您引用int[5][]中的第一项(即数组)时,您将获得null,因为它尚未初始化。当您尝试在此处拨打GetType()时,您会看到NullReferenceException

答案 1 :(得分:2)

您收到此错误,因为您的第二个维度为空。

试试这个:

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 };

答案 2 :(得分:1)

您刚刚声明了锯齿状数组,其中default值为空

因此您需要将这些数组初始化为:

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};