摘要
在 C# 開發中,處理 null
值是一個常見的任務。null
表示一個變數沒有引用任何物件或值型別的預設值。不恰當的 null
值處理可能導致 NullReferenceException
,這是常見的執行時錯誤之一。在這篇文章中,我們將探討 C# 中幾種處理 null
的技術,並透過示例來說明它們的使用。
正文
1. Null 檢查
最基本的處理 null
的方法是在使用變數之前進行顯式檢查。
static void Main(string[] args)
{
PrintName(null);
}
static void PrintName(string name)
{
if (name != null)
{
Console.WriteLine(name);
}
else
{
Console.WriteLine("Name is null!");
}
}
2. 使用 ?.
和 ??
運算子
C# 6.0 引入了空條件運算子 ?.
,它允許你在訪問成員之前檢查物件是否為 null
。本人最喜歡用的還是??
public void PrintLength(string str)
{
int? length = str?.Length;
Console.WriteLine(length ?? 0);
}
此外,??
運算子允許你為可能為 null
的表示式提供一個預設值。
3. Null 合併運算子 ??=
C# 8.0 引入了 null 合併賦值運算子 ??=
,它用於只在左側運算元評估為 null
時才給它賦值。
public void EnsureInitialized(ref string? text)
{
text ??= "Default Value";
}
4. C# 8.0 中的 Nullable Reference Types
C# 8.0 引入了可空引用型別,這允許開發者明確指出哪些變數可以為 null
,從而提供更好的編譯時檢查。
#nullable enable
internal class Program
{
static void Main(string[] args)
{
PrintName("A");
}
static void PrintName(string? name)
{
if (name is not null)
{
Console.WriteLine(name);
}
}
}
5. 使用預設值
在某些情況下,為可能為 null
的變數提供一個預設值是有意義的。
static void Main(string[] args)
{
Console.WriteLine(GetGreeting(null));
}
static string GetGreeting(string? name)
{
// 如果name是空,返回Guest
return $"Hello, {name ?? "Guest"}!";
}
6.使用 Null-coalescing
表示式和 switch
表示式
利用 null-coalescing
和 switch
進行更復雜的 null
檢查。
string str = null;
string result = str switch
{
null => "Default value",
_ => str
};
Console.WriteLine(result); // 輸出: Default value
以上示例展示了在C#中處理 null
的多種方法。透過合理運用這些方法,可以提高程式碼的健壯性,並減少異常發生的可能性。希望這些內容對你在處理 null
問題時有所幫助。