[英]Practical purpose of the null-coalescing assignment operator in C#?
C# 的一項新功能允許我們使用可空引用類型在代碼中刪除空值。 我們鼓勵添加
<Nullable>enable</Nullable>
由於此處描述的問題而添加到項目文件中。
當然,很多現有的項目都不想添加這個。 啟用此功能時需要解決許多錯誤,因此許多遺留空值仍然存在。 但是我們真的需要語言中額外的空函數嗎?
在同一個 C# 8.0 版本中,引入了空合並賦值運算符 ( ??=
)(請參閱文檔)。 我理解這種行為,但它為我們解決了哪些問題? 為什么我們要在x
為空x ??= b
時將b
分配給x
當它不為空時有例如x = a
?
我發現的例子非常理論化,有人可以給我這個運算符的實際應用嗎? 提前致謝!
一個真實的例子是在第一次訪問時延遲加載一個支持字段,當該支持字段為空時。 像這樣的東西:
private string _dbQuery;
private string DbQuery => _dbQuery ??= GetQuery(queryName);
最簡單的用例是,根據我們之前所做的 C# 版本:
if (number == null)
{
number = someVale;
}
或者
number = number ?? someValue;
使用新的賦值運算符,我們可以將其進一步縮短為:
number ??= someNumber;
一個真實世界的例子:
public void WriteErrorToLog(string errorMessage, Exception ex)
{
Log.Warn(errorMessage ??= AppConstants.UnhandledError, ex);
}
不是一個完美的現實世界的例子。 但是可以說我想記錄軟錯誤。 編寫帶有異常的模板消息比生成第二個錯誤/異常要好得多。
空合並運算符?? 如果它不為空,則返回其左側操作數的值; 否則,它評估右側操作數並返回其結果。 ?? 如果左側操作數的計算結果為非空,則運算符不會計算其右側操作數。
在 C# 8.0 及更高版本中可用,空合並賦值運算符??=僅當左手操作數的計算結果為空時,才將其右手操作數的值分配給其左手操作數。 如果左側操作數的計算結果為非空,則??=運算符不會計算其右側操作數。
List<int> numbers = null;
int? a = null;
(numbers ??= new List<int>()).Add(5);
Console.WriteLine(string.Join(" ", numbers)); // output: 5
numbers.Add(a ??= 0);
Console.WriteLine(string.Join(" ", numbers)); // output: 5 0
Console.WriteLine(a); // output: 0
你可以在這里找到更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.