我是C#的新手并且正在研究数组。
我想知道为什么调用i.GetType()
导致NullReferenceException
(对象引用不是.....)?
int[][] myJagArray = new int[5][];
foreach (int[] i in myJagArray) { Console.WriteLine(i.GetType()); }
非常感谢。
答案 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};