C#,否则,速记将无法编译

时间:2018-07-18 08:54:14

标签: c# c#-6.0

以下编译正常:

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

但是对于更简洁的等效项:

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

编译器给出错误:

  

仅赋值,调用,递增,递减和新对象表达式可以用作UniformTestClient语句

我哪里出错了?

2 个答案:

答案 0 :(得分:6)

放入

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

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

答案 1 :(得分:2)

三元运算符返回必须基于true / false的值。您不能以这种方式缩短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);