前言
在C# 進行開發中,檢查參數值是否為null大家都用什么?本文介紹除了傳統的方式==運算符,還有一種可以商用is關鍵字。
C# 7.0 中 is 關鍵字的使用
傳統的方式是使用==運算符:
if(person == null) { }
從 C# 7 開始,可以使用is關鍵字進行空檢查:
if(person is null) { }
1、is關鍵字有一個很大的優勢,它會忽略在要檢查的實例的類上定義的任何運算符重載。
2、當使用==運算符時,該運算符可能會被重載,並且會得到意想不到的結果。
示例
1、is關鍵字
我們來看一個簡單的例子,創建一個.NET 控制台應用程序,在Main 方法中編寫如下所示代碼。
首先聲明了一個person類型的變量Person,並且賦值null, 然后將person == null和結果person is null寫入控制台。
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 { ... }
可以猜猜,上面代碼的運行結果會是什么?
大家可能認為控制台會輸出下面結果:
Is Person null?
== says: True is says: True
實際上,可以從上面的代碼中肯定地說, person is null肯定會返回true,因為person變量實際上是null。
但是 person == null 返回 true或false,是不確定的,因為 Person類沒有定義任何的內容。如果Person類重載了==操作符,它就可以為所欲為。
2、重載==運算符
現在我們再來創建一個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,但是重載過的的操作符返回的結果可能就不同。
總結
優秀是一種習慣,歡迎大家關注學習

