C#中子表达式中OR的三元运算符用法

时间:2015-12-26 15:38:55

标签: c#

我理解三元运算符的标准用法..

string message = hasError=="Y" ? "There's an error!" : "Everything seems fine..."; 

但是如何在子表达式中添加OR ..

if((hasError=="Y")||(seemsfine=="N")){
message="There's an error!";
}else{message="Everything seems fine...";
}

真心感谢任何帮助

由于

2 个答案:

答案 0 :(得分:2)

你可以这样做

string message = hasError == "Y" || seemsfine == "N" ? "There's an error!" : "Everything seems fine...";

没有太大区别。这是因为C# 中的三元运算符 非常方便!

归根结底,这是整个表达(即hasError == "Y" || seemsfine == "N")的结果,而不是你有多少条件。如果你想要的话,你可以放置所有其他条件,只要整个表达式返回true然后它将第一个元素(:的左边)分配给变量,当整个表达式为{{ 1}}它将第二个元素(false的右侧)赋给变量

三元运算符完全等效,if-else语句,其块只是将值赋给单个变量

因此,

:

完全等同于

if (a1 == 0 || a2 > 5 || a3 <= -7)
    b = 1;
else
    b = 2;

如果更多比要分配的单个变量更多,则等效中断

b = a1 == 0 || a2 > 5 || a3 <= -7 ? 1 : 2; //note that there is no bracket here, but it is equivalent to if-else statement with bracket

只要不妨碍代码的可读性,你甚至可以放置多个这样的三元运算符

if (a1 >= 0)
    b = 2;
else
    c = 3; //notice the variable difference, you cannot use ternary operator anymore.

相当于

b = a1 > 0 && a2 < 0 ? 1 : (a3 < 5 ? 2 : 3);

答案 1 :(得分:2)

初始表达式可以像您需要的那样简单或复杂,只要条件最终计算为单个布尔值,就像if语句的第一行一样。

换句话说,这个:

if ((hasError == "Y") || (seemsfine == "N"))
    message="There's an error!";
else
    message="Everything seems fine...";

等同于:

string message = (hasError == "Y" || seemsfine == "N")
    ? "There's an error!"
    : "Everything seems fine...";