默认情况下,GameObject对象是否可以为空?

时间:2020-06-08 22:52:54

标签: unity3d

所以我注意到我可以输入:

GameObject myObject = null;

为什么我能做到这一点?我是C#的新手,但我相信要定义可为空的变量,我应该键入??类型之后。像这样:

GameObject? myObject = null;

为什么不是这种情况?

2 个答案:

答案 0 :(得分:2)

在C#中,可以将引用类型的每个变量分配为null,这与始终分配有值并且永远不能为null的值类型变量相反。

也就是说,有一个名为Nullable reference type的可选语言功能,在Unity中不可用,因为Unity不支持C#8.0。

答案 1 :(得分:0)

在这种情况下,您初始化变量myObject,当您有条件地为其分配某些内容时可以使用它

GameObject myObject = null;
If(some condition) { //Depending on condition instantiate different prefab
    myObject = new GameObject(1);
}
else {
    myObject = new GameObject(2);
}
//Do something with new object

现在,可为空的变量可用于可能未初始化的方法/函数,您可以使用它。例如,您可能从数据库或api中获得空值。

在第一种情况下,类型是GameObject,在第二种情况下,类型是可空的,具有自己的方法

另外,对于整数等值类型(不同于类的引用类型),您需要使用可为空的类型:

int? i = null;
int j = null; //this won't work;

因为null不是值,而是引用(或更像是缺少它)