【问题标题】:Why is this failing to compile?为什么编译失败?
【发布时间】:2013-05-14 06:20:24
【问题描述】:

我需要执行一个包含数学和条件语句以及 switch 语句的表达式。我试过的是这样的:

20 + 10 + (if (20 > 10){ return 0.2; } else { return 0.1; }) //+ switch case

现在编译器会为这个表达式抛出编译错误。为什么,以及如何修复它以使其正常工作?

【问题讨论】:

  • switch 是一种 statement - 不是可以用作另一个表达式的一部分的 expression。就个人而言,我对此感到高兴——我怀疑,否则读起来会很糟糕。不过,您始终可以将 switch/case 提取到方法中。 if/else 部分可以用条件表达式来完成。
  • 你应该使用正确的 switch case 语法;你也错过了 else 括号中的 return 0.1 。 Rgds,
  • 你想在这里做什么?看起来真的很混乱。

标签: c# .net switch-statement conditional


【解决方案1】:

原因:if .. else .. 是语句,而不是表达式。

方法:使用?操作符:

20+10+(20>10)?0.2:0.1+(case_condtion_1)?case_value_1:((case_condtion_2)?case_value_2:(...))

【讨论】:

  • 我们的客户不希望使用三元运算符。
  • 嗯,if ... else ... 是一个三元运算。区别仅在于语法。
  • @user984369 如果您不喜欢使用三元运算符,请参阅我令人困惑的答案。
【解决方案2】:

您正在寻找内联“if/else”的'?' operator

至于内联 switch 语句,我建议改用静态 Dictionary

所以你的台词

20 + 10 +(if(20>10){ return 0.2} else{ 0.1 }) + switch case

变成

20 + 10 + (20 > 10 ? 0.2 : 0.1) + _switchDictionary[switchKey]

【讨论】:

    【解决方案3】:

    如果你喜欢使用if,你可以像这样修改你的表达式:

    20 + 10 + ((Func<double>) (() => { if (20 > 10){ return 0.2; } else { return 0.1; }}))();
    

    但是,它真的会令人困惑。最好像@Murkaeus 所说的那样使用? 运算符。

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 1970-01-01
      • 2014-12-31
      • 2014-04-09
      • 1970-01-01
      • 2016-03-22
      • 2015-05-29
      相关资源
      最近更新 更多