|
|
|
|
|
我們在代碼中經(jīng)常執(zhí)行 null
檢查,以防止NullReferenceException
,我們最常見的方法是:
var product = GetProduct();
if (product == null)
{
// Do something if the object is null.
}
你知道這種方法有什么問題嗎?==
運(yùn)算符可以被覆蓋,并且不能嚴(yán)格保證將對象與null
進(jìn)行比較,會(huì)產(chǎn)生我們期望的結(jié)果。
C# 版本 7
C# 版本 7 中引入了一個(gè)新的運(yùn)算符,即is
運(yùn)算符。
以下是我們?nèi)绾问褂?code>is運(yùn)算符執(zhí)行空檢查:
var product = GetProduct();
if (product is null)
{
// Do something if the object is null.
}
is
運(yùn)算符將始終評估指定的對象實(shí)例是否為null
。它也是一種更簡潔的空檢查編寫方式,因?yàn)樗x起來像一個(gè)句子。
C# 版本 9
從 C# 9 開始,你可以使用否定模式進(jìn)行空檢查:
var product = GetProduct();
if (product is not null)
{
// Do something if the object is not null.
}
C# 版本 11
從 C# 11 開始,你可以使用列表模式來匹配列表或數(shù)組的元素。以下代碼檢查數(shù)組中預(yù)期位置的整數(shù)值:
int[] empty = { };
int[] one = { 1 };
int[] odd = { 1, 3, 5 };
int[] even = { 2, 4, 6 };
int[] fib = { 1, 1, 2, 3, 5 };
Console.WriteLine(odd is [1, _, 2, ..]); // false
Console.WriteLine(fib is [1, _, 2, ..]); // true
Console.WriteLine(fib is [_, 1, 2, 3, ..]); // true
Console.WriteLine(fib is [.., 1, 2, 3, _ ]); // true
Console.WriteLine(even is [2, _, 6]); // true
Console.WriteLine(even is [2, .., 6]); // true
Console.WriteLine(odd is [.., 3, 5]); // true
Console.WriteLine(even is [.., 3, 5]); // false
Console.WriteLine(fib is [.., 3, 5]); // true
總結(jié)
本文介紹了C#進(jìn)行空(null)檢查的正確方法:用is
代替==
,不過在使用之前,要先考慮自己使用的C#版本,因?yàn)?code>is運(yùn)算符只能在C# 7后使用。
相關(guān)文章