有人能解释我这是什么 “:” 在这种情况下怎么办?
var skupaj = dni + zacetniDan + (((dni + zacetniDan) % 7 != 0) ? 7 - ((dni + zacetniDan) % 7) : 0);
有人能解释我这是什么 “:” 在这种情况下怎么办?
var skupaj = dni + zacetniDan + (((dni + zacetniDan) % 7 != 0) ? 7 - ((dni + zacetniDan) % 7) : 0);
:
是三元运算符的一部分。它是if
/else
子句的简码。
实施例: int a = b > 5 ? 2 : 3;
相同:
int a = 0;
if (b > 5)
{
a = 2;
}
else
{
a = 3;
}
这实际上并不是对if/else的简写。它们在语义上相当不同。 *条件*运算符被解析为*值*,而if/else子句不是;它完全存在于由if或else部分的陈述引起的副作用。虽然它与您给出的示例没有密切关系,但例如,它可能会对局部变量生存期产生影响。因此,尽管将条件运算符看作是if/else的有用处,但它们不是*相同的。 – Servy
@Servy你能举一个例子说明它在哪里有所作为。我的头绕着它缠了一点麻烦。谢谢! –
@TomKiley'int result = Math.Sign(isTrue?-1:1);'。要用if/else编写,你需要创建一个局部变量来计算传递给Sign的参数。目前正在创建一个不可见的本地变量,但它可能(也很可能会)的寿命比方法本身更短。要使用“if/else”,你可能需要为整个方法的变量范围。接下来考虑在类变量的级别(在这种情况下它可能更重要)执行该操作。'private int result = Math.Sign(true?-1:1);'。要做到这一点与if/else你需要使用一个构造函数。 – Servy
? :
是conditional operator简写形式的if/then /别的
第一部分是条件应该被评估为布尔值其在?
之前的表达式after ? is then part
并且在条件为ture时返回并且返回expression after : is else part
并返回w母鸡条件被评估为假
+1是唯一的答案(7)使用'?:'运算符的正确名称。 – Servy
(((dni + zacetniDan)%7!= 0)? 7 - ((dni + zacetniDan)%7):0);
这是一种三元表达Condition?Expr1:Expr2
表达的结果是Expr1
结果如果Condition
为真和Expr2
否则结果。
你的具体情况的条件是
((dni + zacetniDan) % 7 != 0)
如果这个条件为真,则三元子表达式的结果将是
7 - ((dni + zacetniDan) % 7)
否则为0
三元操作符。它允许您将条件值视为单个值。
这里有一个基本的例子的布尔转换成字符串
string str = myBool ? "true" : "false";
这相当于
string str
if(myBool)
str = "true";
else
str = "false";
那三元运算符:http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.80).aspx
如果(dni + zacetniDan) % 7 != 0)
是true
然后评估到7 - ((dni + zacetniDan) % 7)
否则评估为0
您可以很容易地通过分割3来理解?
和:
的一条线。
?
左侧期限为?
和:
之间的术语应该怎样,如果条件为真:
后,该术语应该怎样,如果条件中使用使用的条件是假的这是一个三元运算符。
这是代码的以下等效的速记:
int skupaj = dni + zacetniDan;
if ((dni + zacetniDan) % 7 != 0) {
skupaj += 7 - ((dni + zacetniDan) % 7);
}
else {
skupaj += 0;
}
[三元运算符(http://msdn.microsoft.com/en-us/library/ty67wk28(V = VS.80) .aspx) – birryree
[?:Operator](http://msdn.microsoft.com/en-us/library/ty67wk28.aspx) –