目錄
前言
1. == null
2. is null
3. 模式比對
4. ArgumentNullException.ThrowIfNull
結論
前言
前不久,微軟宣布從 C# 11 中移除參數空值檢查功能,該功能允許在方法開始執行之前,在參數名稱的末尾提供參數空值檢查(
!!
操作符)。
那麼,在 C# 中如何檢查參數是否為 null 呢?
1. == null
這個可能是大家第一個就會想到的方法。
使用相等運算符符檢查兩個操作符是否相等:
if(user == null)
throw new ArgumentNullException(nameof(user));
但是,
==
運算符可以被重載,可能導緻檢查空值的結果和預想的不一緻:
public class User
{
...
public static bool operator ==(User user1, User user2)
{
return false;
}
}
var user = null;
if(user == null) // false
throw new ArgumentNullException(nameof(user));
這時,可以使用
is
運算符。
2. is null
is
運算符檢查表達式的結果是否與給定的類型相比對。将表達式與 null 比對時,編譯器保證不會調用使用者重載的
==
運算符:
public class User
{
...
public static bool operator ==(User user1, User user2)
{
return false;
}
}
var user = null;
if(user is null) // true
throw new ArgumentNullException(nameof(user));
3. 模式比對
“模式比對”是一種測試表達式是否具有特定特征的方法。模式比對最常見的方案之一是確定值不是 null:
int? maybe = 12;
if (maybe is int number)
{
Console.WriteLine($"The nullable int 'maybe' has the value {number}");
}
else
{
Console.WriteLine("The nullable int 'maybe' doesn't hold a value");
}
但是,對于檢查空值功能來說,這種方式可讀性較差。
4. ArgumentNullException.ThrowIfNull
如果你使用的是 C# 10,建議你使用
ArgumentNullException.ThrowIfNull
方法檢查空值:
ArgumentNullException.ThrowIfNull(user);
使用該方法的好處之一是在異常消息中會自動包含參數名稱。
結論
你是否還知道其他檢查空值的方法,歡迎留言讨論。