[英]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.