使用C#条件运算符的编译器错误

时间:2010-03-02 19:09:47

标签: c# conditional-operator

我似乎无法在Google上找到我需要的内容,并打赌我会在这里得到快速回答。

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

    Console.Out.WriteLine(str);
那个? :语法对我来说是正确的。我收到了编译错误。

  

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

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

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

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

我这样做的实际代码是:

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

7 个答案:

答案 0 :(得分:15)

您的代码应为:

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

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

<强>更新
如评论中所示,conditional operator返回一个值;它不适用于if / else等控制流程。

答案 1 :(得分:15)

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

但你可以这样做:

str = b.ToString();

甚至完全切断了中间人:

Console.WriteLine(b);

答案 2 :(得分:4)

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

str= b ? "true" : "false"

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

答案 3 :(得分:2)

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

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

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

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