c# 判断是否为null, 到底使用 “is null“ 还是 “==null“

判断是否为null 应该使用 is null
避免使用 “== null”
因为 后者可能调用 “operator ==”

另外1:C# 9.0 引入了 is not
另外2:有用的判断为null 后抛出异常的简洁语句:

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

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

Reference:
https://stackoverflow.com/questions/6417902/checking-if-an-object-is-null-in-c-sharp
https://www.thomasclaudiushuber.com/2020/03/12/c-different-ways-to-check-for-null/

### C# 中 `is not null` 和 `!= null` 的区别 在 C# 编程语言中,`is not null` 和 `!= null` 都用于检查对象是否为空引用。然而,在不同的上下文中它们的行为有所不同。 #### 行为差异 对于传统的引用类型,两者实际上会产生相同的结果: ```csharp object obj = GetSomeObject(); if (obj != null) { Console.WriteLine("Not null"); } // 或者 if (obj is not null) { Console.WriteLine("Not null"); } ``` 但是当涉及到可空值类型以及模式匹配时,`is not null` 提供了更强大的功能[^1]。 #### 可空值类型的处理 考虑下面的例子,其中涉及到了可空的整数类型 (`int?`): ```csharp int? number = null; bool result; result = number != null; // 这会返回 false result = number is not null; // 同样返回 false, 但语义上更加清晰直观 ``` 这里两种方式都有效工作并给出一致的结果;不过使用 `is not null` 更加明确表达了意图——即我们关心的是该变量是否有实际值而不是仅仅是一个简单的布尔比较操作。 #### 模式匹配的支持 从语法糖的角度来看,`is not null` 被设计成更好地融入到模式匹配表达式的框架之中。这使得代码读起来更为流畅自然,并且能够更容易扩展复杂条件逻辑而无需额外嵌套多层判断语句: ```csharp public void ProcessItem(object item) { if(item is string s && !string.IsNullOrEmpty(s)) Console.WriteLine($"String value: {s}"); else if(item is int i && i > 0) Console.WriteLine($"Positive integer: {i}"); else if(item is not null) Console.WriteLine("Non-null but unhandled type."); else Console.WriteLine("Null reference encountered."); } ``` 在这个例子中,通过组合不同形式的模式匹配(包括但不限于 `is not null`),可以实现简洁明了又不失灵活性的功能分支控制流[^2]。 #### 性能考量 就性能而言,这两种方法之间几乎没有差别。编译器通常会对这些简单的一元运算符做优化处理,因此不必担心因选择其一而导致效率上的损失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值