c# - null 条件运算符和专用的 null 检查之间有什么区别吗?
问题描述
例如:
我有一个实例,可能为空,也可能不为空。
我想获得其中一个 bool 成员的值。
我写了一些像这样的糟糕代码:
var someVar = (someInstance != null) ? someInstance.boolValue : false;
ReSharper 提出了另外两种相同的方法:
var someVar = someInstance?.boolValue ?? false;
var someVar = (someInstance != null) && someInstance.boolValue;
是否有任何技术上的理由偏爱他们中的任何一个,或者他们最终会做同样的事情?
解决方案
替代方法不是返回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
在加载或尝试创建实例时仅检查一次,然后您可以从应用程序的其余部分中删除空检查
推荐阅读
- php - POST 请求有时返回代码 302,有时返回代码 200
- datetime - 用均值上采样数据
- cgi - 无法运行 CGI 脚本
- excel - 为文本分配类别
- kubernetes - 如何使用 init 容器检查 MySQL 是否准备好连接?
- python - Discord.py 使用他们的 ID 向用户发送 DM
- flutter - Using same riverpod state provider for multiple pages
- spring - 在没有 @DirtiesContext 的情况下如何在 Quarkus 中实现集成测试?
- javascript - 通过 Docker 问题快速安装
- java - 在java中如何让用户在参差不齐的数组中输入列数,但对于每一行,列数应该不同