gpt4 book ai didi

c# - ReSharper 对可能的 System.NullReferenceException 发出警告,尽管进行了隐式空检查

转载 作者:行者123 更新时间:2023-11-30 21:32:41 24 4
gpt4 key购买 nike

当我使用 if (obj) 而不是 if (obj != null)

例如:

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-null-check-warning

我查看了 "Why is ReSharper suggesting this" 的 ReSharper 页面以及那里的链接,但我找不到对此的解释。

这是 ReSharper 的限制吗?还是隐式检查 null 是不正确或糟糕的风格?

最佳答案

虽然它实际上并没有产生 NullReferenceException,因为您的 Button 可以为 null,并且 if 语句触发了到 boolean 的隐式转换,从而产生了 NullReferenceException,但它通常仍然是有效的警告。

Java 中类似的东西, Check if null Boolean is true results in exception

如果您不喜欢额外的 null 检查,您可以执行与以下 Java 代码等效的 C#,

if (Boolean.TRUE.equals(value)) {...}

关于c# - ReSharper 对可能的 System.NullReferenceException 发出警告,尽管进行了隐式空检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com