【发布时间】:2018-08-30 15:51:13
【问题描述】:
当我使用 if (obj) 而不是 if (obj ! = null) 隐式检查 null 时,我收到了针对 Possible 'System.NullReferenceException' 的 ReSharper (2018.1) 警告。
例如:
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 警告:
我查看了 "Why is ReSharper suggesting this" 的 ReSharper 页面以及那里的链接,但我找不到对此的解释。
这是 ReSharper 限制吗?还是隐式检查 null 是不正确或不好的风格?
【问题讨论】:
-
所以 Button 类有一个从 Button 到
bool的隐式转换?为什么 resharper 应该关心这个?没有约定可以像 javascript 一样使用 C#。 -
@TimSchmelter 哦,我明白了,我很困惑,我认为隐式转换为 bool 是 C# 的内置功能。谢谢。如果您想发表您的评论作为答案,我会将其标记为已接受。
-
这是 Unity 论坛上的相关讨论:Why does Unity implicitly cast any MonoBehavior object to a Boolean