抛出表达式不适用于布尔表达式?

Hap*_*mad 6 c# throw c#-7.0

投掷表达式适用于这种情况:

string myStr;

public MyObj( string myStr ) =>
    this.myStr = myStr ?? throw new ArgumentNullException( "myStr" );
Run Code Online (Sandbox Code Playgroud)

但为什么不编译呢?

bool isRunning;

public void Run() =>
    isRunning = !isRunning || throw new InvalidOperationException( "Already running" );
Run Code Online (Sandbox Code Playgroud)

Dav*_*rno 9

从github上的原始提案:

掷表达被允许只能在以下句法上下文:

  • 作为三元条件运算符的第二个或第三个操作数 ?:
  • 作为空合并运算符的第二个操作数 ??
  • 作为一个表达身体lambda或方法的身体.

这是唯一可以使用throw表达式的三种情况.因此,不包括在布尔表达式中使用throw,并且语法无效.

  • @HappyNomad:如果你对设计团队的评论不满意,那么请与他们一起讨论; 我无能为力.我已经五年没有去过设计团队了.我的观点是,如果那是你想知道的,那么问这里不是找出答案的方法.如果你想了解C#设计过程,请在github上闲逛. (3认同)