三元运算符如何工作?

时间:2009-01-20 21:18:15

标签: c# java c ternary-operator

请演示三元运算符如何使用常规if / else块。例如:

Boolean isValueBig = value > 100 ? true : false;

完全重复: How do I use the ternary operator?

12 个答案:

答案 0 :(得分:29)

Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

if(  value > 100 ) { 
      isValueBig = true;
} else { 
     isValueBig = false;
}

答案 1 :(得分:16)

三元操作和if / else之间的区别在于三元表达式是一个计算值的语句,而if / else则不是。

要使用您的示例,从使用三元表达式更改为if / else,您可以使用以下语句:

Boolean isValueBig = null;
if(value > 100)
{ 
    isValueBig = true 
}
else
{
    isValueBig = false;
}

但在这种情况下,您的陈述与此相同:

Boolean isValueBig = (value > 100);

答案 2 :(得分:10)

当我不熟悉C ++时,我发现它有助于阅读这个结构如下:

Boolean isValueBig = if condition ? then x else: y;

(请注意,这不是有效的代码。这正是我训练自己阅读的内容。)

答案 3 :(得分:6)

Boolean isValueBig;

if (value > 100)
{
   isValueBig = true;
}
else 
{
   isValueBig = false;
}

答案 4 :(得分:5)

Boolean isValueBig;

if(value > 100) { isValueBig = true; } else { isValueBig = false; }

答案 5 :(得分:5)

我从来不是三元运算符的粉丝,因为我觉得它很难阅读。正如它所发生的那样,Jon Skeet和他的书, C#in Depth 终于击中了这只老狗的头部,让它沉入其中。乔恩说,我解释说,把它想象成一个问题。

  

值> 100?

     

“是”:“不”

现在盲人可以看到。

希望这可以帮助你成为第二天性。

答案 6 :(得分:3)

引自?: Operator MSDN page,“条件运算符(?:)根据布尔表达式的值返回两个值中的一个。”

因此,您可以使用三元运算符返回的不仅仅是布尔值:

   string result = (value > 100 ) ? "value is big" : "value is small";

答案 7 :(得分:2)

PHP示例

<?php

  // Example usage for: Ternary Operator
  $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

  // The above is identical to this if/else statement
  if (empty($_POST['action'])) {
    $action = 'default';
  } else {
    $action = $_POST['action'];
  }

?>
  

“表达式(expr1)?(expr2):( expr3)评估为 expr2 ,如果 expr1 评估为 TRUE < / strong>和 expr3 如果 expr1 评估为 FALSE 。“

PHP Documentation on Comparison Operators

答案 8 :(得分:2)

错误的例子,因为你可以轻松写

Boolean isValueBig = value > 100 ? true : false;

为:

bool isValueBig = value > 100

除此之外,其他人都已经回答了这个问题。我不建议使用三元运算符来设置bool值,因为您评估的内容已经是布尔值。

我意识到这只是一个例子,但值得指出。

答案 9 :(得分:2)

确保不要在Java中混合使用true / false部分的类型。它会产生奇怪的结果: - (

答案 10 :(得分:1)

其他人已经回答了这个问题,但是你应该真正了解三元的用法,我的意思是不要这样做。

让我们假设您有一段代码,它应该为某些值的每个可能变体返回一个不同的对象,为简单起见,我们假设一个介于1和5之间的整数。您的代码如下所示:

if(i==1) {
    return new ObjectOne();
} else if(i==2) {
    return new ObjectTwo();
} else if(i==3) {
    return new ObjectThree();
} else if(i==4) {
    return new ObjectFour();
} else if(i==5) {
    return new ObjectFive();
} else {
    return new DefaultObject();
}

这很容易理解,但有点沉重。因为三元只是另一种编写if..else语句的方法,可以重构为

return (i==1) ? new ObjectOne() :
       (i==2) ? new ObjectTwo() :
       (i==3) ? new ObjectThree() :
       (i==4) ? new ObjectFour() :
       (i==5) ? new ObjectFive() : new DefaultObject();

它被称为嵌套三元。这是邪恶的,既然你知道它,请永远不要使用它。它似乎有其用途,如上面的情况,但很可能在现实生活中你需要在它失去可读性的地方使用它(想想用可变数量的参数改变配置等)。

奖金部门:永远不要在if()中设置属性值,只需看看:if(bool=true!=false) { .. }

答案 11 :(得分:0)

引自MSDN(在前一篇文章中提到)

string result =(value&gt; 100)? “价值很大”:“价值很小”;

可以理解为:

价值是否大于100?如果是,则字符串结果为“value is big”,如果为no,则字符串结果为“value is small”。