在 C# 中,null 是一個特殊存在,表示缺少值。Null 可以分配給引用類型和可為 null 的值類型,但不能分配給不可為空的值類型。在 C# 中處理 null 值是編寫可靠且可靠的代碼的一個重要方面。在本文中,我將討論一些在 C# 中處理 null 值的最常用技術。 1 、NULL合併操作符( ...
在 C# 中,null 是一個特殊存在,表示缺少值。Null 可以分配給引用類型和可為 null 的值類型,但不能分配給不可為空的值類型。在 C# 中處理 null 值是編寫可靠且可靠的代碼的一個重要方面。在本文中,我將討論一些在 C# 中處理 null 值的最常用技術。
1 、NULL合併操作符(??)
null合併操作符(??)是一個簡寫操作符,用於在左側對象不為null時返回左側值,在左側對象為null時返回右側值。當您在判斷當前對象值是否null值並且賦值新對象需要簡寫時,此操作符非常有用。
string name = null;
string result = name ?? "Unknown";
Console.WriteLine(result); // Output: Unknown
在上面的示例中,由於name的值為null,因此使用null合併運算符將“Unknown”的值賦給result。
2. 條件運算符 (?:)
條件運算符(?:)是一個三元運算符,用於代替if-else的簡寫,如果條件為真則返回一個值,如果條件為假則返回另一個值。當需要根據條件提供預設值時,此操作符很有用。
string name = null;
string result = (name != null) ? name : "Unknown";
Console.WriteLine(result); // Output: Unknown
在上面的例子中,由於name的值為null,因此使用條件運算符將“Unknown”的值賦給result。
3. 空條件運算符(?.)
如果對象不為空,則使用空條件操作符(?.)訪問對象的成員,否則返回空。當您需要訪問可能為空的對象的屬性或方法時,此操作符非常有用。
string name = null;
int? length = name?.Length;
Console.WriteLine(length); // Output: null
在上面的例子中,因為name的值是空的,所以length的值也是空的。
但你也可以利用 合併操作運算符(??) 進行進階的寫法,代碼如下:
string name = null;
int length = name?.Length??0;
Console.WriteLine(length); // Output: 0
可以看到上面的代碼例子里,length可以不用空的值類型獲取name的長度,可以在你的業務邏輯里認為null的字元串長度也可以是0長度,減少後期值類型的複雜判斷。
4. 空合併賦值操作符 (??=)
空合併賦值操作符(??=)用於在左側對象為空時將右側對象賦值給左側。意思就是如果變數對象為空,可以給它賦值一個預設對象值,在理解上它可以簡化代碼並使其更加簡潔。
string name = null;
name ??= "Unknown";
Console.WriteLine(name); // Output: Unknown
在上面的示例中,由於name的值為空,因此使用空合併賦值操作符將“Unknown”的值賦給name。
5. 寬容運算符 (!.)
允許為空的操作符(!.)用於告訴編譯器值不為空,即使編譯器無法確定該值不為空。當您知道一個值不會為空,但編譯器無法確定它不會為空時,此操作符很有用。
string name = null!;
int length = name.Length;
Console.WriteLine(length); // Output: System.NullReferenceException
在上面的例子中,寬容操作符用於告訴編譯器name的值不可為空。但是,由於name的值實際上是空的,所以系統在運行時拋出NullReferenceException。
6. 使用 is 運算符
在C#編程語言中,“is”操作符是一個關鍵字,用於檢查變數是否與特定類型相容。隨著C#7.0中常量模式的引入,這個運算符獲得了額外的功能。具體來說,現在可以使用“is”操作符將值與常量(如null)進行比較。
if (name is null)
{
// code to execute
}
Console.WriteLine(name);
使用“is”運算符的擴展功能使開發人員能夠在c#應用程式中執行類型檢查和比較時編寫更簡潔、更可讀的代碼。
或者,您也可以使用操作符檢查:==null
object obj = null;
if (obj == null)
{
// do something if obj is null
}
else
{
// do something else if obj is not null
}
這兩種方法都可以,但是使用操作符進行檢查可能更具可讀性和表現力,特別是當與其他類型檢查 is null 結合使用時。
7. ArgumentNullException 參數空異常
最後,ArgumentNullException類用於處理傳遞給方法或構造函數的空參數。當您需要確保傳遞給方法或構造函數的參數不為空時,該類非常有用。
public void DoSomething(string name)
{
if (name == null)
{
throw new ArgumentNullException(nameof(name));
}
Console.WriteLine($"Hello, {name}!");
}
// Usage
DoSomething(null); // Output: System.ArgumentNullException: Value cannot be null. (Parameter 'name')
在上面的例子中,ArgumentNullException類用於在name的值為空時拋出異常。
結論
在軟體開發中,處理null值是非常重要的事情。我們討論了在C#中處理null值的7種技術。此外,在C#中處理null值對於避免空引用異常和其他意外行為也很重要。