C# 為什麼你應該更喜歡 is 關鍵字而不是 == 運算符

前言

  在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 返回 truefalse,是不確定的,因為 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,但是重載過的的操作符返回的結果可能就不同。

總結

  因此在程式碼中我們可以進行明智的選擇,如果想要進行null的判斷,is關鍵字就是最好的選擇。你一旦使用習慣了,它在程式碼中看起來是比較清晰簡潔。

  原文://www.thomasclaudiushuber.com
  作者:

 

優秀是一種習慣,歡迎大家關注學習