【问题标题】:Compiler error using C# conditional operator使用 C# 条件运算符的编译器错误
【发布时间】:2010-03-02 19:09:46
【问题描述】:

我似乎无法在谷歌上找到我需要的东西,我打赌我会在这里得到快速的答案。

    String str;
    bool b = true;
    b ? str="true" : str="false";

    Console.Out.WriteLine(str);

那个? : 语法对我来说是正确的。我得到了编译器错误。

Program.cs(13,28):
错误 CS1002: ;预计
程序.cs(13,28):
错误 CS1525:无效的表达式术语 ':'
程序.cs(13,30):
错误 CS1002: ;预计

不确定 csharp 语法,但它是在 cpp 中构建的。请帮忙!谢谢!

更新: 大约有 10 人给出正确答案 LOL,所以我将奖励给第一个提交它的人。

有趣的语法,我认为我实际上比 c++ 语法更喜欢它。

我这样做的实际代码是:

ftp.ConnectMode = job.FTPUsePassiveMode ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE;

【问题讨论】:

  • 其他人已经给出了正确的解决方案;优先顺序可能是问题所在。 b ? (str="true") : (str="false"); 即使这样,我也不会那样使用它。
  • @cchampion:“有趣的语法,我认为我实际上比 c++ 语法更喜欢它。” -- c++ 语法是一样的。它应该是 str = b ? "true" : "false" 两种语言。

标签: c# conditional-operator


【解决方案1】:

您的代码应为:

str = b ? "true" : "false";

但是,这类似于只调用b.ToString().ToLower()。也就是说,我怀疑您的实际用例比将布尔值转换为字符串要复杂一些。

更新
如 cmets 所示,conditional operator 返回一个值;它不适用于像if/else 这样的控制流。

【讨论】:

  • 相关的一点是三元运算符(?:)是一个返回值的表达式,而不是控制流机制(如if/else)。
【解决方案2】:
str = b ? "true" : "false";

但你可以这样做:

str = b.ToString();

甚至完全去掉中间人:

Console.WriteLine(b);

【讨论】:

  • 严格来说,你会从 ToString()(以及 WriteLine)中得到“True”和“False”,而不是“true”和“false”,但我不确定这是否重要大部头书。你总是可以做 ToString().ToLower().
【解决方案3】:

三元运算符不允许语句切换,只能切换值。你想这样做:

str= b ? "true" : "false"

(显然b.ToString())是解决这个特殊问题的更好解决方案,但我假设这只是一个例子)。

【讨论】:

  • 表达式选择...并且 str="true" 是一个表达式。试试a = b? (str="true"): (str="false");我想你会发现它工作得很好。
  • 为了说明这是有效的 c++ 代码,这是因为您可以使用语句来获取 c++ 中的值。所以以下内容在 c++ 中是有效的(虽然很混乱):a = b ? c=d : c=f
  • @Ben:是的,表达式选择是一个更好的术语,赋值是一个表达式(返回放入左值的值),但是三元运算符的输出不能忽略。
【解决方案4】:

【讨论】:

    【解决方案5】:
    str = (b) ? "true" : "false";
    

    【讨论】:

    • 但是...为什么要把b 括在括号中?我看不出它解决了歧义。
    【解决方案6】:

    三元运算符不能是 C# 语句的顶层,因为 C# 要求顶层表达式有副作用。

    【讨论】:

      【解决方案7】:

      只是出于好奇,为什么不这样做:

      bool b = true;
      string str = b.ToString();
      

      在 .NET 中,值类型会在调用 .ToString() 时自动将其值转换为字符串...包括布尔值。

      【讨论】:

      • 虽然这是一个很好的建议,但它并没有回答为什么三元运算符在这种情况下不起作用的问题。
      • 关键是要彻底消除问题。其他答案充分解释了为什么它不起作用(因为他使用不正确。)我不喜欢重复答案,尤其是当有一堆相同的答案时。我认为这不值得投反对票,因为它是解决问题的有效方法,即使它没有明确回答他的问题。
      猜你喜欢
      • 2012-08-13
      • 2012-01-09
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多