首页 > 解决方案 > null 条件运算符和专用的 null 检查之间有什么区别吗?

问题描述

例如:

我写了一些像这样的糟糕代码:

var someVar = (someInstance != null) ? someInstance.boolValue : false;

ReSharper 提出了另外两种相同的方法:

var someVar = someInstance?.boolValue ?? false;

var someVar = (someInstance != null) && someInstance.boolValue;

是否有任何技术上的理由偏爱他们中的任何一个,或者他们最终会做同样的事情?

标签: c#

解决方案


替代方法不是返回null,而是创建类型的“默认”实例。可以很好地适应您有默认值的场景

public class MyClass
{
    public static readonly MyClass Default = new MyClass(false);

    public bool HaveSomething { get; }

    public MyClass(bool haveIt) => HaveSomething = haveIt;
}

// Usage

var someThing = LoadThing(); // Never returns null

if (someThing.HaveSomething)
{
    // some action
}

目标是null在加载或尝试创建实例时仅检查一次,然后您可以从应用程序的其余部分中删除空检查


推荐阅读