前言
在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
,但是過載過的的操作符返回的結果可能就不同。
總結
優秀是一種習慣,歡迎大家關注學習