天天看點

在 C# 中如何檢查參數是否為 null前言1. == null2. is null3. 模式比對4. ArgumentNullException.ThrowIfNull結論

目錄

前言

1. == null

2. is null

3. 模式比對

4. ArgumentNullException.ThrowIfNull

結論

前言

前不久,微軟宣布從 C# 11 中移除參數空值檢查功能,該功能允許在方法開始執行之前,在參數名稱的末尾提供參數空值檢查(

!!

操作符)。

在 C# 中如何檢查參數是否為 null前言1. == null2. is null3. 模式比對4. ArgumentNullException.ThrowIfNull結論

那麼,在 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);
           

使用該方法的好處之一是在異常消息中會自動包含參數名稱。

結論

你是否還知道其他檢查空值的方法,歡迎留言讨論。

繼續閱讀