如何翻译“var a = 集合.First().somePropA ??新 A();“
本文关键字:First somePropA 集合 何翻译 翻译 var | 更新日期: 2023-09-27 18:35:20
在
表达式中使用空合并运算符在赋值右侧使用单个问号的目的是什么?例:
var a = collection?.First()?.somePropA ?? new A();
单
引号 (?.
) 是 C# 6.0 中新添加的,表示null
检查。
因此,例如,以下代码是相同的;
var foo = bar?.bar2;
或
var foo = null;
if (bar != null)
foo = bar.bar2;
else
foo = null;
但是,两者都可以返回null
。因此,如果结果确实null
,则可以使用 ??
检查来分配值。
话虽如此,可以编写以下代码;
var foo = bar?.bar2 ?? new Bar2();
这基本上与
var foo = null;
if (bar != null)
foo = bar.bar2;
else
foo = new Bar2();
多次使用?.
可以真正缩短代码。例如,考虑以下行;
var foo = bar?.bar2?.bar3?.bar4?.bar5 ?? new Bar5();
这是句法糖
var foo = null;
if (bar != null)
{
if (bar.bar2 != null)
{
if (bar.bar2.bar3 != null)
{
if (bar.bar2.bar3.bar4 != null)
{
if (bar.bar2.bar3.bar4.bar5 != null)
foo = bar.bar2.bar3.bar4.bar5;
else
foo = new Bar5();
}
else
foo = new Bar5();
}
else
foo = new Bar5();
}
else
foo = new Bar5();
}
else
foo = new Bar5();
当然,已经有更好的方法来编写上述内容(例如,在进行所有检查之前初始化foo = new Bar5()
),但为了清楚起见,我保持了这种方式。
?.
是一个新运算符,可帮助开发人员省略对 null 的过多检查。
您可以在此处阅读更多内容:https://msdn.microsoft.com/en-us/library/dn986595.aspx
collection.First()
从集合中获取第一项。如果不null
它将调用somePropA
。如果它是null
(这是这个运算符的目的),它将返回null
:这只是进行空检查的明智方法。它称为空条件运算符。
该单个字符无需检查每个属性或返回值null
。
另一种写法:
var a = ( collection != null && collection.First() != null
? collection.First().somePropA : null
) ?? new A();
或:
A a;
if (collection != null && collection.First() != null)
{
a = collection.First().somePropA;
}
else
{
a = null;
}
if (a == null)
{
a = new A();
}