gpt4 book ai didi

c# - 如何翻译 "var a = collection?.First()?.somePropA ?? new A();"

转载 作者:行者123 更新时间:2023-11-30 19:09:02 25 4
gpt4 key购买 nike

在带有空合并运算符的表达式中赋值右侧的单个问号的目的是什么?示例:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com