7

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

    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 人给出了正确的答案,哈哈,所以我将奖励给第一个提交它的人。

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

我这样做的实际代码是:

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

7 回答 7

15

您的代码应为:

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

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

更新
如注释中所示,条件运算符返回一个值;它不适用于if/之类的控制流else

于 2010-03-02T19:10:25.910 回答
15
str = b ? "true" : "false";

但你可以这样做:

str = b.ToString();

甚至完全去掉中间人:

Console.WriteLine(b);
于 2010-03-02T19:10:35.630 回答
4

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

str= b ? "true" : "false"

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

于 2010-03-02T19:11:57.423 回答
2

其他人所说的话,以及:http: //msdn.microsoft.com/en-us/library/ty67wk28.aspx

于 2010-03-02T19:12:41.120 回答
1
str = (b) ? "true" : "false";
于 2010-03-02T19:10:56.567 回答
0

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

于 2010-03-02T19:12:47.467 回答
-1

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

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

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

于 2010-03-02T19:12:58.593 回答