所以我注意到我可以输入:
GameObject myObject = null;
我为什么能做到这一点?我是C#的新手,但我相信要定义可为空的变量,应该键入??类型之后。像这样的东西:
GameObject? myObject = null;
为什么不是这种情况?
在C#中,可以将引用类型的每个变量都分配为null,这与总是分配有值并且永远不能为null的值类型的变量相反。
也就是说,有一个称为Nullable reference type的可选语言功能,由于Unity不支持C#8.0,因此在Unity中不可用。
在这种情况下,初始化变量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不是值,而是引用(或更像是缺少它)