作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在带有空合并运算符的表达式中赋值右侧的单个问号的目的是什么?示例:
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()
),但是为了清楚起见,我保持这种方式.
关于c# - 如何翻译 "var a = collection?.First()?.somePropA ?? new A();",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35476392/
在带有空合并运算符的表达式中赋值右侧的单个问号的目的是什么?示例: var a = collection?.First()?.somePropA ?? new A(); 最佳答案 单引号(?.)是C#
我是一名优秀的程序员,十分优秀!