IRONSOFTWAREHOME

在 10 分鐘或更短時間內 C# 10 和 .NET 6 中的 Null 參數檢查

Null Parameter Checks in C# 10 and .NET 6 In 10 Minutes or Less

Tim Corey

4m 49s

在使用C#時,開發人員常常會遇到將空參數傳遞進方法的情況。 如果處理不當,這可能會導致意料之外的行為、運行時錯誤,甚至未處理的異常。 在他的影片"不到10分鐘學會C# 10與.NET 6中的空參數檢查"中,Tim Corey解釋了C# 10如何透過ArgumentNullException類來簡化空值的處理。

在這篇文章中,我們將按照Tim的解釋逐步講解該影片,以了解空檢查是如何運作的,以及它們在現代C#中的改進。

準備階段 – 檢查空參數

Tim開始建立一個簡單的.NET 6控制台應用來展示在C#中如何處理空參數檢查。 他清除模板程式碼並宣告了一個可空的字串變數:

string? info = null;

此空物件表示一個場景,即方法呼叫可能接收到未正確實例化的參數。 然後Tim定義了一個簡單的方法:

void SayHi(string message)
{
    Console.WriteLine($"您好 {message}");
}
C#

他將info變數傳遞給該方法:

SayHi(info);

當程式執行時,輸出只是顯示:

您好
Text

未發生異常,因為字串連接接受空值並將其視為空字串。 但正如Tim指出的,在大多數真實場景中,這可能導致錯誤多發情況,在調用堆棧中後端出現問題或稍後出現NullReferenceException。

為了編寫健壯的程式碼,開發人員應驗證參數並確保任何方法預期會接收到有效的非空輸入。

C# 10之前的傳統空檢查

Tim解釋道,在C# 10之前,好的做法是手動檢查參數並在需要時拋出ArgumentNullException。 在SayHi方法中,他新增了:

if (message is null)
    throw new ArgumentNullException(nameof(message));

此檢查確保如果傳遞了空參數,程式將立即拋出ArgumentNullException類的一個新實例。

當Tim運行程式碼時,錯誤資訊清楚顯示:

System.ArgumentNullException: Value cannot be null. (Parameter 'message')

此未處理的異常表示方法接收了無效參數。 參數名——在本例中為'message'——自動顯示在輸出中,幫助開發人員精確識別是哪些參數引起了問題。

Tim指出,這種手動檢查在.NET Framework和早期的.NET Core版本中運行良好。 然而,在處理多個參數時,這很冗長且重複。 需要驗證的每個附加參數都要增加三到四行程式碼,使方法體變得冗雜。

C# 10中的簡化方法 – ArgumentNullException.ThrowIfNull()

在這時,Tim介紹了現代的C# 10語法。 現在開發人員可以用單行空檢查來替代為每個參數編寫多行程式碼:

ArgumentNullException.ThrowIfNull(message);

Tim解釋說,這個單行程式碼在內部執行相同的驗證邏輯。 如果傳遞的參數為空,該方法會自動拋出異常——就像以前一樣——但語法更加清晰。

當程式再次執行時,出現以下輸出:

System.ArgumentNullException: Value cannot be null. (Parameter 'message')

行為保持不變,但現在語法更簡化。 不再需要手動建立ArgumentNullException物件或手動指定paramName參數。 呼叫者的參數名由編譯器自動推斷。

Tim強調,這種改進節省了時間,並減少了因引用錯誤的參數名而引發人為錯誤的機會。

範例:多個參數

然後Tim比較傳統方法和處理多個參數時的新方法。

在C# 10之前,開發人員可能會編寫:

if (name is null)
    throw new ArgumentNullException(nameof(name));
if (email is null)
    throw new ArgumentNullException(nameof(email));
if (password is null)
    throw new ArgumentNullException(nameof(password));

有了C# 10的增強,同樣的檢查現在可以更簡潔地書寫:

ArgumentNullException.ThrowIfNull(name);
ArgumentNullException.ThrowIfNull(email);
ArgumentNullException.ThrowIfNull(password);

這種改進不僅僅是關於減少行數——它使您的方法更清晰、可讀性更高,且更易於維護。 Tim指出,如果您的方法需要三個參數,您現在只需三行空檢查,而不是十二行程式碼。

為什麼這很重要 – 更安全、更健壯的程式碼

Tim指出,雖然手動將空值傳遞給字串的操作在演示中可能不現實,但它代表著真實世界中的問題。 API、使用者輸入、反序列化過程,或者由物件返回的任務可能會出乎意料地產生空物件。

通過在方法開始處新增空檢查,您可以防止意外行為並實現快速失敗——即程式在問題傳播之前,在調用堆棧的早期拋出一個異常。

他還提到,這種新語法幫助您在各個方法中保持一致的錯誤處理模式。 這鼓勵編寫對無效輸入和未實例化物件有韌性的健壯程式碼。

ArgumentNullException詳情

Tim指出,ArgumentNullException是System命名空間的一部分並繼承自ArgumentException類。 當將空引用傳遞給不接受它作為有效參數的方法時,就會拋出它。

它通常包括:

  • 引發問題的參數名。

  • 明確的錯誤資訊:"值不能為空"。

  • 說明異常發生位置的調用堆棧。

Tim的範例展示了.NET 6如何繼續遵循這種行為,同時改進了語法。

他還簡要提到,開發人員可以將這些檢查與其他功能結合起來,例如空合并運算符(??)或預設值,以提供後備邏輯——例如:

message ??= "Default message";

這允許方法分配一個預設值而不是拋出,如果需要的話。

空檢查在錯誤處理中的重要性

Tim提醒開發人員,即使C#現在支持可空引用型別,運行時空檢查仍然是必要的。 編譯器無法捕捉每個空引用問題——尤其當資料來自外部來源或您無法控制的方法時。

他強調最好的做法是檢查您的參數並在適當時拋出ArgumentNullException,確保只有在輸入有效時才執行該方法。 這最小化了運行時錯誤,簡化了錯誤處理,並防止了靜默失敗。

總結與展望

如Tim所述,C# 11將引入更多改進,但目前,ArgumentNullException.ThrowIfNull()是.NET 6中錯誤處理和程式碼安全性手的最佳小功能改進之一。

他鼓勵開發人員在自己項目中嘗試這種方法,看看方法更清晰的程度。 他以一個問題結束:"您對C# 10的這一變化有什麼想法?"

最後的想法

Tim Corey的影片清楚地表明了ArgumentNullException.ThrowIfNull()方法是C# 10中的一項簡單但強大的改進。它減少了易於出錯的手動程式碼,確保了有效的參數,並在傳遞空參數時快速失敗程式。

透過一致地使用此方法,開發人員可以構建出強健、可讀性強且易於維護的程式碼,黑格利地處理異常並避免隱蔽的空引用錯誤。

簡言之,無論何時您的方法需要有效參數並且您想防止空參數,請遵循Tim Corey的範例,並使用:

ArgumentNullException.ThrowIfNull(parameterName);

這是一種更清晰、更安全並且更現代的方法,能保護您的程式碼免受空值和運行時錯誤影響,在.NET 6及以後版本中。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立