在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
,可是重載過的的操做符返回的結果可能就不一樣。
優秀是一種習慣,歡迎你們關注學習