提问人:Bagbaq 提问时间:7/26/2023 最后编辑:Bagbaq 更新时间:7/26/2023 访问量:89
定义是必须的还是非必须的?[已结束]
Is defining a must or not? [closed]
问:
public List<ItemData> itemBase;
当我声明此列表时,我可以在没有定义的情况下使用它,在声明变量时定义是否有好处?
public List<ItemData> itemBase = new List<ItemData>();
如果有人能解释,我将不胜感激。
编辑:
public List<ItemData> itemBase;
ItemData i = new ItemData();
i.itemName = "dsadsad";
i.itemSprite = "lolo";
ItemData i2 = new ItemData();
i2.itemName = "dsadsad2";
i2.itemSprite = "lolo2";
itemBase.Add(i);
itemBase.Add(i2);
你们说我不能使用.add功能,但我可以使用。是的,我在 ItemData i2 中定义,但我没有实例化列表,我只是实例化列表成员。
答:
3赞
Robert Harvey
7/26/2023
#1
public List<ItemData> itemBase;
声明一个 类型的变量 。因为是引用类型,所以它的初始值是 。这是完全有效的 C# 代码,但如果您尝试对其执行方法,例如List<ItemData>
List<ItemData>
null
itemBase.Add(myItemData);
你将得到一个 null 引用异常,因为该变量没有引用任何可以执行 Add 方法的对象。
然后,当您将
itemBase = new List<ItemData>();
实例化 type 的对象并将其分配给 ,然后对该方法的调用将起作用。List<ItemData>
itemBase
Add
在 C# 中,值对变量的初始(第一次)赋值称为初始化。
评论
1赞
JonasH
7/26/2023
可能值得一提的是“Target typed new”,即List<ItemData> itemBase = new ();
0赞
Robert Harvey
7/26/2023
@jonasH 或 .var itemBase = new List<ItemData>();
0赞
Ralf
7/26/2023
@JonasH 在拥有坚实的语言基础之前,我们应该尽量不要让新生与语言的捷径混淆。
0赞
JonasH
7/26/2023
是的,但是对于字段/属性,如果您不想重复该类型,则需要使用 target typed new。当然,目前还不完全清楚 OP 是在询问字段还是局部变量。
评论
itemBase.Add(...)