繁体   English   中英

UnassignedReferenceException 即使使用空条件运算符

[英]UnassignedReferenceException even though using the null-conditional operator

我收到一个UnassignedReferenceException: The variable _Preset of Foo has not been assigned. 即使我使用的是空条件运算符?. .

我的代码:

// […]
myTarget.Preset?.ApplyTo(myTarget);

我还注意到它提到了_Preset而不是Preset (我觉得很奇怪)。

Foo.cs代码:

[CreateAssetMenu()]
public class Foo : ScriptableObject
{
    [SerializeField] private Preset _Preset = null;

    public Preset Preset
    {
        get { return _Preset; }
        protected set { _Preset = value; }
    }
}

我究竟做错了什么? 这不是运营商的用途吗?

谷歌搜索没有帮助。

Unity 有一种自定义方法来检查检查器的引用是否为空。

当 MonoBehaviour 具有字段时,仅在编辑器中 [1],我们不会将这些字段设置为“真正的空”,而是设置为“假空”对象。 我们的自定义 == 运算符能够检查某物是否是这些假空对象之一,并相应地进行操作

他们可能没有重载空条件运算符。 您的get属性返回“假空”,解释您的未分配错误(而不是 NullReferenceException)。

自定义空检查也有很多缺点。 它的行为与 ?? 运算符,它也执行空检查,但该运算符执行纯 c# 空检查,并且无法绕过调用我们的自定义空检查。

我猜空条件运算符也会出现同样的问题。

作为较晚的更新,如果有可能,您绝对应该使用ReSharper Extension for Unity

在其他简洁的功能中,只要有可能, ReShaper for Unity会在您尝试使用不应该在 Unity 对象上使用的运算符时向您发出警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM