繁体   English   中英

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

[英]Compiler error using 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人给出了正确的答案,哈哈,所以我将奖励授予它的第一个人。

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

我这样做的实际代码是:

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

您的代码应为:

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

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

更新资料
如注释中所示, 条件运算符返回一个值; 它不像if / else那样用于控制流。

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

但是您可以这样做:

str = b.ToString();

甚至完全切掉中间人:

Console.WriteLine(b);

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

str= b ? "true" : "false"

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM