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

问题描述 投票:0回答:2

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

GameObject myObject = null;

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

GameObject? myObject = null;

为什么不是这种情况?

unity3d
2个回答
0
投票

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

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


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不是值,而是引用(或更像是缺少它)

© www.soinside.com 2019 - 2024. All rights reserved.