数组实例化错误
Array Instantiation Error
我有两个类:
public class SubObject {
public int id;
}
public class Object {
public SubObject[] SubObjects;
}
我有一个数组:
public Object[] Objects;
当我尝试实例化这个数组时:
public void InstantiateArrays(int objectsSize, int subObjectsSize) {
Objects = new Object[objectsSize];
foreach (Object obj in Objects) {
obj.SubObjects = new SubObject[subObjectsSize];
}
}
我收到此错误:
An exception of type 'System.NullReferenceException' occurred in
**** but was not handled in user code
Additional information: Object reference not set to an instance of an object.
这是无效的:
Objects = new Object[objectsSize];
foreach (Object obj in Objects) {
这是因为第一行将创建一个由 null
引用组成的数组,这是 C# 中 Object
引用的默认值。使用 foreach
不会让您覆盖引用。
您需要使用数组索引来设置数组元素:
for(int i = 0; i < this.Objects.Length; i++ ) {
this.Objects[i] = new SubObject[ subObjectSize ];
}
请注意,使用 Object
通常不是一个好主意,因为它会强制您使用转换。如果您有分层对象层次结构,则在适当的情况下使用强类型或更好的类型:泛型。
这一行:
Objects = new Object[objectsSize];
你创建了一个数组。数组的 元素 被初始化为该类型的默认值。因为它是一个 objects 的数组,这个默认值是 null
.
在循环中,您试图访问 null
:
对象的字段 SubObjects
obj.SubObjects = new SubObject[objectsSize];
快速修复是使用 for
循环并在循环中实例化对象:
for (int i = 0; i < subObjectSize; i++)
{
Objects[i] = new Object();
Objects[i].SubObjects = new SubObject[subObjectsSize];
}
另请注意,将您的 class 之一命名为 Object
是一种不好的做法,因为这是对象层次结构根部的 class 的名称。
我有两个类:
public class SubObject {
public int id;
}
public class Object {
public SubObject[] SubObjects;
}
我有一个数组:
public Object[] Objects;
当我尝试实例化这个数组时:
public void InstantiateArrays(int objectsSize, int subObjectsSize) {
Objects = new Object[objectsSize];
foreach (Object obj in Objects) {
obj.SubObjects = new SubObject[subObjectsSize];
}
}
我收到此错误:
An exception of type 'System.NullReferenceException' occurred in **** but was not handled in user code
Additional information: Object reference not set to an instance of an object.
这是无效的:
Objects = new Object[objectsSize];
foreach (Object obj in Objects) {
这是因为第一行将创建一个由 null
引用组成的数组,这是 C# 中 Object
引用的默认值。使用 foreach
不会让您覆盖引用。
您需要使用数组索引来设置数组元素:
for(int i = 0; i < this.Objects.Length; i++ ) {
this.Objects[i] = new SubObject[ subObjectSize ];
}
请注意,使用 Object
通常不是一个好主意,因为它会强制您使用转换。如果您有分层对象层次结构,则在适当的情况下使用强类型或更好的类型:泛型。
这一行:
Objects = new Object[objectsSize];
你创建了一个数组。数组的 元素 被初始化为该类型的默认值。因为它是一个 objects 的数组,这个默认值是 null
.
在循环中,您试图访问 null
:
SubObjects
obj.SubObjects = new SubObject[objectsSize];
快速修复是使用 for
循环并在循环中实例化对象:
for (int i = 0; i < subObjectSize; i++)
{
Objects[i] = new Object();
Objects[i].SubObjects = new SubObject[subObjectsSize];
}
另请注意,将您的 class 之一命名为 Object
是一种不好的做法,因为这是对象层次结构根部的 class 的名称。