我是C#的新手,对数组很感兴趣。
我想知道为什么对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
。
但是,数组类型是引用类型。默认情况下,它们被初始化为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};