所以我注意到我可以输入:
GameObject myObject = null;
为什么我能做到这一点?我是 C# 的新手,但我相信要定义一个可为空的变量,我应该键入 ?在类型之后。像这样:
GameObject? myObject = null;
为什么不是这样呢?
在 C# 中,引用类型的每个变量都可以分配 null,而值类型的变量始终分配了一个值,并且永远不能为 null。
也就是说,有一个名为 Nullable 引用类型的可选语言功能在 Unity 中不可用,因为 Unity 不支持 C#8.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 中获取空值。
同样在第一种情况下,类型是游戏对象,在第二种情况下,类型是可为空的,它有自己的方法
此外,对于整数等值类型(与类等引用类型不同(,您需要使用可为空的类型:
int? i = null;
int j = null; //this won't work;
因为 null 不是一个值,而是一个引用(或者更像是一个缺乏它(