小编典典

问号和点运算符是什么意思?在 C# 6.0 中是什么意思?

all

在 VS2015 预览版中的 C# 6.0 中,我们有了一个新的操作符 ?. ,它可以像这样使用:

public class A {
   string PropertyOfA { get; set; }
}

...

var a = new A();
var foo = "bar";
if(a?.PropertyOfA != foo) {
   //somecode
}

它究竟是做什么的?


阅读 101

收藏
2022-03-14

共1个答案

小编典典

它是 空条件 运算符。它基本上意味着:

“评估第一个操作数;如果为空,则停止,结果为空。否则,评估第二个操作数(作为第一个操作数的成员访问)。”

在您的示例中,关键是 if ais null, thena?.PropertyOfA将评估为null而不是抛出异常-
然后它将该null引用与foo(使用字符串的==重载)进行比较,发现它们不相等并且执行将进入if语句的主体.

换句话说,它是这样的:

string bar = (a == null ? null : a.PropertyOfA);
if (bar != foo)
{
    ...
}

…除了a只评估一次。

请注意,这也可以更改表达式的类型。例如,考虑FileInfo.Length. 这是 type 的一个属性long,但如果你将它与 null
条件运算符一起使用,你最终会得到一个 type 的表达式long?

FileInfo fi = ...; // fi could be null
long? length = fi?.Length; // If fi is null, length will be null
2022-03-14