对多维度数组调用C#GetType()会导致NullReferenceException

本文关键字:NullReferenceException 多维度 数组 调用 C#GetType | 更新日期: 2023-09-27 17:58:17

我是C#的新手,对数组很感兴趣。

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

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

非常感谢。

对多维度数组调用C#GetType()会导致NullReferenceException

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

int[] foo = new int[3];

将创建一个由3个零组成的数组。打印:

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

会给你Int32

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

因此,当您引用int[5][]中的第一个项(它是一个数组)时,您将得到一个null,因为它尚未初始化。当您尝试就此调用GetType()时,您将看到一个NullReferenceException

您收到此错误是因为您的第二个维度为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值作为空

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

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