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

 

優秀是一種習慣,歡迎你們關注學習  

相關文章
相關標籤/搜索