不同的方式检查Null

检查参数值是否为空的经典方法是什么?如果您已经使用C语言开发了一段时间,您可能会熟悉以下经典语法:

public static int CountNumberOfSInName(string name)
{
  if (name == null)
  {
    throw new ArgumentNullException(nameof(name));
  }

  return name.Count(c => char.ToLower(c).Equals('s'));
}

自C# 7开始,您可以使用is关键字进行null检查,如下面的代码段所示:

if (name is null)
{
  throw new ArgumentNullException(nameof(name));
}

 但是对于C# 7,甚至还有一个更短的语法。还引入了丢弃。它们是未使用且被忽略的变量,在代码中用下划线(_)。结合空合并运算符(??),可以这样编写空检查:

_ = name ?? throw new ArgumentNullException(nameof(name));

也就是说,整个方法看起来就像这样:

public static int CountNumberOfSInName(string name)
{
  _ = name ?? throw new ArgumentNullException(nameof(name));

  return name.Count(c => char.ToLower(c).Equals('s'));
}

老实说,我真的很喜欢使用丢弃的最后一种方法,但是对于一些开发人员来说,这可能太多了。我认为is关键字非常清晰易读。它是我的最爱。

is关键字还有一个很大的优点,就是它忽略了任何==/!=运算符或者重载特定类。不管是否有操作符重载,它都将执行null检查。这比仅仅使用==更好。

C# 9.0中的Is关键字和Not模式

在C# 9.0中,如果您想检查对象不为null,那么将is表达式与逻辑not模式结合起来这是非常强大的。在C# 9.0之前,您必须使用如下的is表达式来检查对象是否为null:

if (!(name is null)) { }

一些开发人员倾向于使用以下语法来检查name不为null:

if (name is object) { }

但是上面的陈述既不可读也不容易理解。这就是为什么许多开发人员仍然喜欢经典的方式:

if (name != null) { }

但从C# 9.0开始,您可以编写如下的非空检查,我认为这是真正可读的代码:

if (name is not null) { }

 

So, with C# 9.0, you can write your null / not-nulll checks like below, and I think that’s readable: 因此,使用C# 9.0,您可以编写null/not-null检查,如下所示,我认为这是可读的:

if (name is null) { }

if (name is not null) { }

参考资料

这篇博文: https://www.thomasclaudiushuber.com/2020/03/19/c-why-you-should-prefer-the-is-keyword-over-the-operator/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HappyGirl快乐女孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值