2012-11-26 258 views
3

可能重复:
C# ?: Conditional Operator“:”在这种情况下做什么?

有人能解释我这是什么 “:” 在这种情况下怎么办?

var skupaj = dni + zacetniDan + (((dni + zacetniDan) % 7 != 0) ? 7 - ((dni + zacetniDan) % 7) : 0); 
+5

[三元运算符(http://msdn.microsoft.com/en-us/library/ty67wk28(V = VS.80) .aspx) – birryree

+1

[?:Operator](http://msdn.microsoft.com/en-us/library/ty67wk28.aspx) –

回答

8

:是三元运算符的一部分。它是if/else子句的简码。

实施例: int a = b > 5 ? 2 : 3;

相同:

int a = 0; 
if (b > 5) 
{ 
    a = 2; 
} 
else 
{ 
    a = 3; 
} 
+1

这实际上并不是对if/else的简写。它们在语义上相当不同。 *条件*运算符被解析为*值*,而if/else子句不是;它完全存在于由if或else部分的陈述引起的副作用。虽然它与您给出的示例没有密切关系,但例如,它可能会对局部变量生存期产生影响。因此,尽管将条件运算符看作是if/else的有用处,但它们不是*相同的。 – Servy

+0

@Servy你能举一个例子说明它在哪里有所作为。我的头绕着它缠了一点麻烦。谢谢! –

+1

@TomKiley'int result = Math.Sign(isTrue?-1:1);'。要用if/else编写,你需要创建一个局部变量来计算传递给Sign的参数。目前正在创建一个不可见的本地变量,但它可能(也很可能会)的寿命比方法本身更短。要使用“if/else”,你可能需要为整个方法的变量范围。接下来考虑在类变量的级别(在这种情况下它可能更重要)执行该操作。'private int result = Math.Sign(true?-1:1);'。要做到这一点与if/else你需要使用一个构造函数。 – Servy

4

? :conditional operator简写形式的if/then /别的

第一部分是条件应该被评估为布尔值其在?之前的表达式after ? is then part并且在条件为ture时返回并且返回expression after : is else part并返回w母鸡条件被评估为假

+1

+1是唯一的答案(7)使用'?:'运算符的正确名称。 – Servy

2

(((dni + zacetniDan)%7!= 0)? 7 - ((dni + zacetniDan)%7):0);

这是一种三元表达Condition?Expr1:Expr2

表达的结果是Expr1结果如果Condition为真和Expr2否则结果。

你的具体情况的条件是

((dni + zacetniDan) % 7 != 0) 

如果这个条件为真,则三元子表达式的结果将是

7 - ((dni + zacetniDan) % 7) 

否则为0

1

三元操作符。它允许您将条件值视为单个值。

这里有一个基本的例子的布尔转换成字符串

string str = myBool ? "true" : "false"; 

这相当于

string str 
if(myBool) 
    str = "true"; 
else 
    str = "false"; 
1

您可以很容易地通过分割3来理解?:的一条线。

  • 上的?左侧期限为
  • ?:之间的术语应该怎样,如果条件为真
  • :后,该术语应该怎样,如果条件中使用使用的条件是假的
4

这是一个三元运算符。

这是代码的以下等效的速记:

int skupaj = dni + zacetniDan; 

if ((dni + zacetniDan) % 7 != 0) { 
    skupaj += 7 - ((dni + zacetniDan) % 7); 
} 
else { 
    skupaj += 0; 
} 
相关问题