【问题标题】:Short if form does not work如果表单不起作用,则短
【发布时间】:2015-12-18 09:12:22
【问题描述】:
(myCondition!="true")
    ? output("false"); doSomethingElse();
    : output("true")

为什么 IDE 在双点处显示“预期分号”?

【问题讨论】:

  • 应该是 (myCondition!="true") ?输出(“假”):输出(“真”)
  • 您真的希望我们修复您的伪代码吗? "true"StringmyCondition 也是 String 还是 bool?为什么要使用条件运算符?使用if...else
  • 省略分号会导致错误。这是合乎逻辑的,因为编译器无法判断第一个表达式的结束位置
  • @Tim Schmelter:是的,为什么不呢?我试图理解为什么它不起作用。
  • @Best_Where_Gives:我认为你不是判断你的问题是否清晰的最佳人选,因为它会引起混乱。如果您要问为什么代码无法编译,请不要提供您一开始就不会编译的代码!我们如何知道问题的哪些部分您没有提供真正的代码,以及问题的哪些部分您不理解语言?

标签: c# if-statement short


【解决方案1】:

条件运算符不是“短 if 形式”...它是一个运算符,它根据对第一个操作数的评估来评估第三个操作数或第二个操作数。整个表达式的结果是计算过的任何一个操作数的结果(第 2 个/第 3 个),在必要时转换为结果类型(第 2 个和第 3 个操作数必须是相同的类型,或者必须有一个一个到另一个的隐式转换)。

您不能将其用作单个语句,当然也不能将多个语句用作操作数。请注意,它必须评估为一个值 - 如果 OutputDoSomethingElsevoid 方法,那是您不能使用条件运算符的另一个原因。

只是不要这样做。当您想要if 语句的执行模型时,请使用if 语句。

// I generally try to make conditions positive where possible. It's easier to read IMO.
if (myCondition == "true")
{
    Output("true");
}
else
{
    Output("false");
    DoSomethingElse();
}

【讨论】:

  • 也许值得注意的是,要么第一个和第二个表达式的类型必须相同,要么必须存在从一种类型到另一种类型的隐式转换。运算符的全部目的是分配一个值,而不是根据某些条件(例如if...else)来更改控制流。
  • @TimSchmelter:是的,添加了一点。
【解决方案2】:

这并不打算作为“if”的一般替代品。相反,它通常用于在两个值之间进行选择;

 var clothing = isRaining ? hat : sunglasses;

用经典的 if 来更好地表达你正在做的事情;

if (myCondition!="true") 
{
    output("false"); 
    doSomethingElse();
}
else
{
    output("true")
}

您遇到的实际问题是您在第一个分支中包含了两个语句;

output("false"); doSomethingElse();

在这种形式下,你只能有一个语句,并且它必须返回一个值。在output("false") the language is expecting the:` 之后为 else-value;你给它一个分号,它会感到困惑。

【讨论】:

  • 感谢您的详细解答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2014-02-21
  • 1970-01-01
  • 2013-04-12
  • 2012-03-04
  • 1970-01-01
相关资源
最近更新 更多