我已经创建了这样的Object数组。但是要为对象赋值,我必须在数组的每个位置实例化每个对象?我为什么需要这个?
这是我的方法
StageObject[] StageSplitDate = new StageObject[Stages.Rows.Count];
for (int i = 0; i < Stages.Rows.Count; i++)
{
StageSplitDate[i] = new StageObject();
StageSplitDate[i].StageId = "String Value";
StageSplitDate[i].FromTime = StartTime;
StartTime =StartTime.AddMinutes(Convert.ToDouble(10));
StageSplitDate[i].ToTime = StartTime;
}
return StageSplitDate;
和对象类
public class StageObject
{
public string StageId { get; set; }
public DateTime FromTime { get; set; }
public DateTime ToTime { get; set; }
}
答案 0 :(得分:3)
我必须在数组的每个位置实例化每个对象吗?
您没有两次实例化数组元素。在第一行中,您实例化了一个数组StageSplitDate
,其中每个元素都设置为null。默认情况下,每个数组(引用类型)元素都被初始化为null。 To进一步使用它你需要实例化数组中的每个对象,否则你将获得null引用异常。
对于C#
Arrays (C# Programming Guide) - MSDN
数值数组元素的默认值设置为零,引用元素设置为空。
(因为该问题最初是为java标记的)
对于JAVA
4.12.5. Initial Values of Variables
- 每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10):
- 对于所有引用类型(§4.3),默认值为null 。
答案 1 :(得分:2)
您的数组是StageObject
引用的数组。 StageObject
本身尚不存在。基本上,数组中的每个条目仅“指向”或“引用”StageObject
。
在致电new StageObject()
之前,每个数组元素都是null
,这意味着它什么都没有。
答案 2 :(得分:2)
想想一个阵列是书架的类比。如果你想要一摞书,只需购买货架只是第一步;然后你需要购买每本书并把它放在架子上。同样的想法:分配数组为您提供一个空容器,然后您需要创建每个对象并将其放入容器中。
为什么会这样?因为最初为空的数组通常是你想要的 - 即使它不是,除非你的对象只有一个no-arg构造函数,Java甚至不知道如何构造每个对象。
答案 3 :(得分:1)
StageObject [] StageSplitDate = new StageObject [Stages.Rows.Count];
上面的语句只为StageObject
生成了一个引用数组,这些引用数组初始化为null,但实际上并没有初始化StageObject
的对象
StageSplitDate [i] = new StageObject();
以上语句创建了StageObject
类型的对象,并将引用分配给StageSplitDate
元素
答案 4 :(得分:1)
new StageObject[Stages.Rows.Count]
创建一个包含StageObject
空引用的新Stages.Rows.Count
引用数组。您希望每个元素都指向StageObject
。为此,您需要创建一些StageObject
实例。