【问题标题】:Using C# Ternary Operator使用 C# 三元运算符
【发布时间】:2023-03-05 03:25:01
【问题描述】:

可能是一个简单的语法问题。这是一个控制台程序的尝试,它读取通过用户输入接收的字符串的长度。如果长度大于144,则提示用户字符串长度过长,否则输入的字符串只是输出到控制台。

string input = Console.ReadLine();
(input.Length > 144) ? Console.WriteLine("The message is too long"); : Console.WriteLine(input);
Console.ReadLine();

在第 2 行的当前状态下出现语法错误。我是否缺少括号?

【问题讨论】:

  • 去掉分号
  • @Rakitić - 删除中间的分号无济于事,因为Console.WriteLine 返回无效。 C# 中的三元运算符不是If/else 的快捷方式,运算符中: 的每一侧都必须计算为某个值,并且必须在某处分配或使用结果。

标签: c# operator-keyword ternary


【解决方案1】:

尝试:

Console.WriteLine((input.Length > 144) ? "The message is too long" : input);

您需要使用运算符的返回值,否则会收到编译时错误Only assignment, call, increment, decrement, and new object expressions can be used as a statement

这些其他答案都不会编译,我不确定每个人都在做什么。

【讨论】:

  • 确定@AlexEdwards
【解决方案2】:

你有一个额外的分号。 三元表达式是ONE表达式,所以它的末尾只有一个分号。

(input.Length > 144) ? Console.WriteLine("The message is too long") /*No Semi Here*/ : Console.WriteLine(input);

我相信在 C# 中(与 C 和 C++ 不同),三元表达式不能是独立的。
它的结果必须被赋值或使用。

表达式整体必须有值,但Console.WriteLine 不返回值(返回类型void)。您不能有一个评估为类型 void 的三元组。

您曾尝试将三元作为独立语句使用,这是不合法的。

【讨论】:

  • 无法编译。
  • 好吧,你自己解释一下,“三元表达式不能是独立的。它的结果必须被赋值或使用。”Console.WriteLine 返回void ,您希望如何使用 void 的结果?
  • 根据您的编辑:并不是他将其用作独立语句,而是他正在调用一个为两个选项返回 void 的函数。做var foo = /*rest of code*/ 不会解决问题,但你的回答表明它会。
  • 那您没有阅读我的完整答案。我首先纠正了他的语法错误(语句中间的额外分号),然后解释了他对表达式的误用。我坚持我的回答。
  • 你怎么能忍受甚至不能编译的东西?你试过id吗?
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2014-01-16
  • 2014-02-08
  • 2011-02-15
  • 2011-09-30
相关资源
最近更新 更多