我正在考虑在C#中使用??
运算符(null-coalescing运算符)。但是MSDN上的documentation是有限的。
我的问题:如果左侧操作数不为空,是否会对右侧操作数进行评估?
答案 0 :(得分:29)
与以往一样,C#规范是最适合此类事情的地方。
从C# 5 specification的第7.13节(强调我的):
a ?? b
形式的空合并表达式要求a
具有可空类型或引用类型。如果a
为非空,则a ?? b
的结果为a
;否则,结果为b
。 仅当b
为空时,操作才会评估a
。
有关执行任何转换的详细信息以及确切的行为,但这是给出问题的主要观点。值得注意的是,空合并运算符是右关联的,因此a ?? b ?? c
被评估为a ?? (b ?? c)
...这意味着它只会评估c
如果两者 a
和b
为空。
答案 1 :(得分:11)
为什么不测试它:))
void Main()
{
var leftOrRight = left ?? right;
}
public bool? left
{
get
{
Console.WriteLine ("Left hit");
return true;
}
}
public bool right
{
get
{
Console.WriteLine ("Right hit");
return true;
}
}
问题的答案是no
......第二个值没有得到评估
答案 2 :(得分:4)
来自规范:
形式为a ??的空合并表达式b要求a为可空类型或引用类型。如果a是非null,则结果为?? b是一个;否则,结果是b。 仅当a为空时,操作才会计算b。
(强调补充)
答案 3 :(得分:2)
检查一下。如果name不为null,则控制台显示“MyName”。如果它为null,则控制台显示“Called”,然后显示“Allo”
using System;
public class Program
{
public static void Main()
{
string name = "MyName";
Console.WriteLine(name??test());
}
private static string test()
{
Console.WriteLine("Called");
return "Allo";
}
}