当前位置: 首页 > 知识库问答 >
问题:

可能系统的重竖琴警告。尽管进行了隐式null检查,但出现了NullReferenceException

公羊嘉
2023-03-14

我收到了一个针对<代码>可能'系统的ReSharper(2018.1)警告。当我用if(obj)而不是if(obj!=null)隐式检查null时,NullReferenceException“。

例如:

using JetBrains.Annotations;
using UnityEngine.UI;

public class CanBeNullTest : MonoBehaviour
{
    [CanBeNull] public Button Button { get; set; }

    private void EnableButton_explicitCheck()
    {
        if (Button != null) Button.enabled = true;
    }

    private void EnableButton_implicitCheck()
    {
        if (Button) Button.enabled = true;
    }

    //private void EnableButton_cSharp6()
    //{
    //    // null propagating operator is not available in C# 4
    //    Button?.enabled = true;
    //}
}

只有隐式空检查显示ReSharper警告:

我查看了ReSharper页面上的“为什么ReSharper会建议这样做”以及那里的链接,但我找不到对此的解释。

这是重拾器限制吗?或者隐式检查null是错误的还是错误的风格?

共有2个答案

孔冥夜
2023-03-14

if(按钮)涉及到到对bool的隐式转换,在这种情况下不会产生null引用异常,但它通常是一个有效的警告。

冀嘉木
2023-03-14

虽然它实际上不会生成NullReferenceException,因为您的按钮可以为null,并且if语句触发到布尔值的隐式转换,从而生成NullReferenceException,但它通常仍然是有效的警告。

Java类似的东西,检查null Boolean是否为true导致异常

如果您不喜欢额外的空检查,那么可以执行与以下Java代码相当的C#操作,

if (Boolean.TRUE.equals(value)) {...}
 类似资料:
  • 问题内容: 我正在尝试将接口绑定到其实现,如从配置文件中读取的那样,以便可以将其提供给IoC容器。这大致是我想做的事情: 是否有可能获得? 问题答案: 您需要将类显式传递给构造函数(并自行存储)。

  • 问题内容: 我不明白…是我还是这是节点中的错误? 可以按预期进行: 这发出了警告: 我懂了 问题答案: 使用与承诺回报新希望(这就是所谓的链接)。因此,当您执行以下操作时: 您的最初承诺在哪里,您将在第1行上创建一个新的承诺(现在不再存在。我们称它为 )。因此,即使您使用with ,也不会处理上的拒绝,这解释了您在控制台上看到的消息。 为了避免出现此消息,您应该在第1行的新承诺中添加a

  • 我要做的是从音频文件中生成10秒的片段,并在这个过程中将它们转换成WAV。我正在使用javazoom vorbisspi和mp3spi库。它适用于mp3和WAV文件,但不适用于。ogg文件。 我试图列出我想要的编码(PCM签名)的可用目标格式,奇怪的是,对于mp3文件,可用格式列表是空的(尽管它工作),而ogg文件列表显示我想要的PCM编码(尽管它不工作)。不过,回放. ogg文件是可行的。这是我

  • 问题内容: 我正在使用Proguard缩小代码。我的策略是启用它,然后按照警告进行操作以保留其抱怨的内容。如果有外部库,我尝试遵循作者提供的Proguard说明。许多指令都包含一个标志。如果禁用该标志,则会收到警告。如果我们通过标志保留大多数类,为什么仍会发出警告?例: 问题答案: ProGuard中有许多警告,它们的含义不同。这个特别的一个: 意味着ProGuard在处理类A时遇到了对类B的引用

  • 在过去几个月里,我的应用程序的用户收到以下错误: 谷歌。谷歌。应用程序。请求。请求错误配额超出配额组“默认”,并限制消费者“project_number:*”的服务“calendar-json.googleapis.com”的“每天查询”。[403]错误[消息[配额超出配额组“默认”,并限制消费者“project_number”的服务“calendar-json.googleapis.com”的“