预期在?:运算符中的表达式

0 c# if-statement

为什么我不能有这样的东西:

Some_Function ? myList.Add(a) : throw new Exception();
Run Code Online (Sandbox Code Playgroud)

为什么我不能在?:operator的else部分抛出异常??:运营商的主要目的是什么?

建议 如果有人想知道同样的事情,除了阅读下面的答案,我建议你也阅读这篇文章.. 表达与声明

Dav*_*ton 6

其他答案和评论当然是正确的(我们可以参考文档),虽然我对这个问题的理解更像是"为什么它必须这样?".

根据C#5.0规范,条件运算符形成表达式,而不是语句.我怀疑它不是一个声明的原因,因此阻止你做类似的事情a ? b() : throw e只是因为我们已经有一个声明构造来实现基本相同的东西; 即,if..else.

if (a) { b(); } else { throw e; }
Run Code Online (Sandbox Code Playgroud)

条件运算符的好处是它可以在语句或其他表达式中使用.

bool? nb = GetValue();
if (nb ?? (a ? b() : c())) { throw e; }
Run Code Online (Sandbox Code Playgroud)