C# 的一项新功能允许我们使用可空引用类型在代码中删除空值。我们鼓励添加
<Nullable>enable</Nullable>
Run Code Online (Sandbox Code Playgroud)
由于此处描述的问题而添加到项目文件中。
当然,很多现有的项目都不想添加这个。启用此功能时需要解决许多错误,因此许多 遗留空值仍然存在。但是我们真的需要语言中的额外空函数吗?
在同一个 C# 8.0 版本中,??=引入了空合并赋值运算符 ( )(请参阅文档)。我理解这种行为,但它为我们解决了哪些问题?为什么我们要在它为空时分配b给x它,x ??= b并且x = a在它不为空时有例如?
我发现的例子非常理论化,有人可以给我这个运算符的实际应用吗?提前致谢!
一个真实的例子是在第一次访问时延迟加载一个支持字段,当该支持字段为空时。像这样的东西:
private string _dbQuery;
private string DbQuery => _dbQuery ??= GetQuery(queryName);
Run Code Online (Sandbox Code Playgroud)
最简单的用例是,根据 C# 版本,我们之前会这样做:
if (number == null)
{
number = someVale;
}
Run Code Online (Sandbox Code Playgroud)
或者
number = number ?? someValue;
Run Code Online (Sandbox Code Playgroud)
使用新的赋值运算符,我们可以将其进一步缩短为:
number ??= someNumber;
Run Code Online (Sandbox Code Playgroud)
一个现实世界的例子:
public void WriteErrorToLog(string errorMessage, Exception ex)
{
Log.Warn(errorMessage ??= AppConstants.UnhandledError, ex);
}
Run Code Online (Sandbox Code Playgroud)
这不是一个完美的现实世界例子。但假设我想记录软错误。编写带有异常的模板消息比生成第二个错误/异常要好得多。