【问题标题】:C# if then else shorthand won't compile [duplicate]C# if then else 速记不会编译
【发布时间】:2018-07-18 08:54:14
【问题描述】:

以下编译ok:

if (_logon.LogonToConnector())
{
    MessageBox.Show("Logon Success");
}
else
{
    MessageBox.Show("Logon Failed");
}

但对于更简洁的等价物:

_logon.LogonToConnector() ? MessageBox.Show("Logon Success") : MessageBox.Show("Logon Failure");

编译器报错:

只有赋值、调用、递增、递减和新建对象表达式可以作为语句 UniformTestClient

我哪里做错了?

【问题讨论】:

  • 三元运算符用于返回值,这些值必须被赋值。这是一个解决方法stackoverflow.com/a/38451083/2946329
  • 我哪里出错了?... Only assignment, call, increment, decrement, and new object expressions can be used as a statement UniformTestClient 就是这样
  • 只需一次谷歌搜索,您就会比输入问题更快地得到答案。

标签: c# c#-6.0


【解决方案1】:

放吧

MessageBox.Show(_logon.LogonToConnector() 
  ? "Logon Success"
  : "Logon Failed");

因为三元运算符必须返回一个值。

【讨论】:

  • 对我来说太快了 :-)
【解决方案2】:

三元运算符返回一个基于真/假的值,该值必须被赋值。您不能以这种方式缩短 if/else 语句。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator

你可以这样做

string message = _logon.LogonToConnector() ? "Logon Success" : "Logon failed";

MessageBox.Show(message);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-28
    • 2014-09-07
    • 2014-08-08
    • 2013-07-18
    • 2014-06-14
    • 1970-01-01
    • 2016-10-06
    • 2011-07-17
    相关资源
    最近更新 更多