为了账号安全,请及时绑定邮箱和手机立即绑定

UnassignedReferenceException即使使用空条件运算符

UnassignedReferenceException即使使用空条件运算符

C#
海绵宝宝撒 2021-05-06 14:21:39
我正在UnassignedReferenceException: The variable _Preset of Foo has not been assigned.使用null-conditional运算符, 但得到的却是?.。我的代码:// […]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; }    }}我究竟做错了什么?这不是运营商的目的吗?Google搜索没有帮助。
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

Unity有一种自定义方式来检查检查员的引用是否为null。

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

他们可能没有重载null条件运算符。您的get属性返回“ fake null”,以说明未分配的错误(而不是NullReferenceException)。

自定义null检查还具有很多缺点。它与??的行为不一致 运算符,该运算符也执行null检查,但是该操作符执行纯c#null检查,并且不能被绕过以调用我们的自定义null检查。

我猜对于空条件运算符也会发生同样的问题。


查看完整回答
反对 回复 2021-05-21
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

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

ReShaper for Unity会在其他整洁功能中尽可能警告您,如果您尝试使用不应该对Unity对象使用的运算符。


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 723 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信