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

在VS2015预览版中使用C#6.0,我们有了一个新的运算符, 可以像这样使用:

public class A {

string PropertyOfA { get; set; }

}

...

var a = new A();

var foo = "bar";

if(a?.PropertyOfA != foo) {

//somecode

}

它到底是做什么的?

回答:

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

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

在您的示例中,关键是如果ais nulla?.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

以上是 问号和点运算符是什么?在C#6.0中意味着什么? 的全部内容, 来源链接: utcz.com/qa/400310.html

回到顶部