and*_*hin 2 c# nullable null-coalescing
使用null-coalescing运算符在赋值表的赋值右侧单个问号的目的是什么?例:
var a = collection?.First()?.somePropA ?? new A();
Run Code Online (Sandbox Code Playgroud)
单引号(?.)是在C#6.0中新添加的,表示null检查.
因此,例如,以下代码是相同的;
var foo = bar?.bar2;
Run Code Online (Sandbox Code Playgroud)
要么
var foo = null;
if (bar != null)
foo = bar.bar2;
else
foo = null;
Run Code Online (Sandbox Code Playgroud)
但是,两者仍然可以返回null.因此,??如果结果确实如此,可以使用检查来分配值null.
话虽这么说,可以写下面的代码;
var foo = bar?.bar2 ?? new Bar2();
Run Code Online (Sandbox Code Playgroud)
这基本上是一样的
var foo = null;
if (bar != null)
foo = bar.bar2;
else
foo = new Bar2();
Run Code Online (Sandbox Code Playgroud)
?.多次使用可以真正缩短您的代码.例如,考虑以下行;
var foo = bar?.bar2?.bar3?.bar4?.bar5 ?? new Bar5();
Run Code Online (Sandbox Code Playgroud)
这是语法糖
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();
Run Code Online (Sandbox Code Playgroud)
当然,已经有更好的方法来编写上述内容(例如,通过foo = new Bar5()在进行所有检查之前进行初始化),但为了清楚起见,我保持这种方式.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |