Jer*_*meJ 3 c# unity-game-engine null-conditional-operator
UnassignedReferenceException: The variable _Preset of Foo has not been assigned.即使我使用的是空条件运算符, 我也得到了一个?.。
我的代码:
// […]
myTarget.Preset?.ApplyTo(myTarget);
Run Code Online (Sandbox Code Playgroud)
我还注意到它提到了_Preset而不是Preset(我觉得很奇怪)。
代码Foo.cs:
[CreateAssetMenu()]
public class Foo : ScriptableObject
{
[SerializeField] private Preset _Preset = null;
public Preset Preset
{
get { return _Preset; }
protected set { _Preset = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?这不是运营商的用途吗?
谷歌搜索没有帮助。
当 MonoBehaviour 具有字段时,仅在编辑器中[1],我们不会将这些字段设置为“真正的空”,而是设置为“假空”对象。我们的自定义 == 运算符能够检查某物是否是这些假空对象之一,并相应地进行操作
他们可能没有重载空条件运算符。您的get属性返回“假空”,解释您的未分配错误(而不是 NullReferenceException)。
自定义空检查也有很多缺点。它的行为与 ?? 运算符,它也执行空检查,但该运算符执行纯 c# 空检查,并且无法绕过调用我们的自定义空检查。
我猜空条件运算符也会出现同样的问题。