带返回值的空合并运算符(??)

时间:2018-10-14 09:18:42

标签: c# c#-7.0 null-coalescing

我想知道为什么可以在C#7.0中做到这一点:

int? test = 0;
int test2 = test ?? throw new Exception("Error");

..但不是这样:

int? test = 0;
int test2 = test ?? return;

有人可以解释吗?

2 个答案:

答案 0 :(得分:8)

throw相对较新(在C#7.0中)已变成可启用此功能的表达式。 return尚未-它始终是公正的声明。 ??运算符需要一个表达式,而不是一个语句。这是C#设计人员的任意选择,特别是允许将throw??一起使用。

See the documentation on the throw expression

答案 1 :(得分:1)

好吧,因为没有人以这种方式实现它。或者更确切地说,因为return不是表达式。

throw以前只是C#7.0之前的语句,但后来由于提议而被扩展为表达式(空合并运算符仅支持表达式)。

因此,除非没人建议将return用作表达式,否则它将不起作用。