有人可以向我解释这一小段代码吗?

时间:2009-10-17 00:29:25

标签: c# conditional

bool stop = false;
           int f1 = 1;
           int f2 = 2;
           int f3 = 0;
           int sum = 2;
           while (!stop)
           {
               f3 = f1 + f2;
               sum += f3 % 2 == 0 ? f3 : 0; //THIS ONE
               stop = f3 > 4000000 ? true : false;//AND THIS ONE.
               f1 = f2;
               f2 = f3;
           }

什么是条件运算符?这是我第一次看到这样的事情。

9 个答案:

答案 0 :(得分:14)

该行:

sum += f3 % 2 == 0 ? f3 : 0; //THIS ONE

与:

相同
if (f3 % 2 == 0)
  sum += f3;
else
  sum += 0;

当然可以改写为

if (f3 % 2 == 0) sum += f3;

和行

stop = f3 > 4000000 ? true : false;//AND THIS ONE.

相同
if (f3 > 4000000)
   stop = true;
else 
   stop = false;

或者更好:

stop = f3 > 4000000; 

答案 1 :(得分:5)

表达式

x = c ? a : b;

相当于

if (c)
    x = a;
else
    x = b;

此外,声明

stop = f3 > 4000000 ? true : false;

完全是多余的,可以简化为

stop = (f3 > 4000000);

(为了清晰起见,增加了Paretheses。)

答案 2 :(得分:4)

它被称为ternary operator

答案 3 :(得分:2)

如果条件(左边的东西是真的,那么它使用第一个(前一个)如果不是它使用第二个(后面的东西:)。

int res = someCondition ? valueIfTrue : valueIfFalse;

请参阅:http://msdn.microsoft.com/en-us/library/ty67wk28%28VS.80%29.aspx

另一个你很快就会看到:

   SomeClass res = someVariable ?? valueIfSomeVariableIsNull;

重构路由上的

更新:,您可能需要:

while (!isMoreThan4Million)
{
   f3 = f1 + f2;
   bool sumIsEven = f3 % 2 == 0;
   sum += sumIsEven ? f3 : 0;
   isMoreThan4Million = f3 > 4000000;
   f1 = f2;
   f2 = f3;
}

答案 4 :(得分:2)

http://msdn.microsoft.com/en-us/library/ty67wk28%28VS.80%29.aspx

它基本上是这样的:

如果这种情况属实?然后这样做:否则这样做

答案 5 :(得分:1)

http://msdn.microsoft.com/en-us/library/ty67wk28%28VS.80%29.aspx

它被称为三元运算符。它会评估之前的值:如果表达式在左边?是的 - 否则它会在:

之后评估值

答案 6 :(得分:0)

它或多或少是一个紧凑的等价物,如果那么:

(condition) ? ifConditionIsTrueUseThisValue : ifConditionIsFalseUseThisValue ;

常用于进行条件值赋值:

variableName = (condition) ? valueIfConditionIsTrue : valueIfConditionIsFalse ;

简单的愚蠢示例,用于指定忽略零以下值的x值:

x = (x < 0) ? 0 : x ;

答案 7 :(得分:0)

如同原作一样精心编写,你可以进一步模糊它的意图:

int sum = 2;
for(int f1 = 1, f2 = 2, f3 = 0; !((f3 = (f1 + f2)) > 4000000); f1 = f2, f2 = f3)
    sum += f3 * (~f3 & 1);

......或者......像普通人一样写下来:

int f1 = 1;
int f2 = 2;
int f3 = 0;
int sum = 2;

while( f3 <= 4000000 )
{
    f3 = f1 + f2;
    bool even = (f3 & 1) == 0;
    if( even )
        sum += f3;
    f1 = f2;
    f2 = f3;
}

...或......如果你喜欢它真的很简单:

int sum = 4613732;

即使重写了两次之后,我也无法做到这一点......无论如何,这是什么目的?

答案 8 :(得分:-2)

谓词?然后:否则