在C# 进行开发中,检查参数值是否为null
你们都用什么?本文介绍除了传统的方式==
运算符,还有一种能够商用is关键字。ide
传统的方式是使用==
运算符:学习
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
返回 true
或false
,是不肯定的,由于 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
,可是重载过的的操做符返回的结果可能就不一样。
优秀是一种习惯,欢迎你们关注学习