C# 为何你应该更喜欢 is 关键字而不是 == 运算符

前言

  在C# 进行开发中,检查参数值是否为null你们都用什么?本文介绍除了传统的方式==运算符,还有一种能够商用is关键字。ide

C# 7.0 中 is 关键字的使用

  传统的方式是使用==运算符:学习

if(person == null) { }

  从 C# 7 开始,可使用is关键字进行空检查:spa

if(person is null) { }

  一、is关键字有一个很大的优点,它会忽略在要检查的实例的类上定义的任何运算符重载。code

  二、当使用==运算符时,该运算符可能会被重载,而且会获得意想不到的结果。blog

示例

  一、is关键字开发

  咱们来看一个简单的例子,建立一个.NET 控制台应用程序,在Main 方法中编写以下所示代码。get

  首先声明了一个person类型的变量Person,而且赋值null, 而后将person == null和结果person is null写入控制台。string

static void Main(string[] args) { Person person = null; ​ Console.WriteLine("Is Person null?"); ​ Console.WriteLine($"== says: {person == null}"); ​ Console.WriteLine($"is says: {person is null}"); } public class Person { ... }

  能够猜猜,上面代码的运行结果会是什么?it

  你们可能认为控制台会输出下面结果:class

Is Person null? 
== says: True is says: True

  实际上,能够从上面的代码中确定地说, person is null确定会返回true,由于person变量其实是null

  可是 person == null 返回 truefalse,是不肯定的,由于 Person类没有定义任何的内容。若是Person类重载了==操做符,它就能够随心所欲。

  二、重载==运算符

  如今咱们再来建立一个Person类像下面这样的,以下所示,重载了==运算符,而且只返回 false:

public class Person { public static bool operator ==(Person x, Person y) { return false; } public static bool operator !=(Person x, Person y) { return !(x == y); } public override bool Equals(object obj) { return base.Equals(obj); } }

  如今运行控制台应用程序时,能够看到下面的输出结果:

Is Person null? 
== says: False is says: True

  is关键字运行的结果是正确的,由于person变量其实是null,可是重载过的的操做符返回的结果可能就不一样。

总结

  所以在代码中咱们能够进行明智的选择,若是想要进行null的判断,is关键字就是最好的选择。你一旦使用习惯了,它在代码中看起来是比较清晰简洁。

  原文:https://www.thomasclaudiushuber.com
  做者:Thomas Claudius Huber

 

优秀是一种习惯,欢迎你们关注学习  

相关文章
相关标签/搜索