增量整数的三元运算符

时间:2012-07-02 13:33:12

标签: c# ternary-operator

有人可以告诉我为什么下面的代码不起作用吗?

    int prePos = 0;
    int preNeg = 0;

    int postPos = 0;
    int postNeg = 0;

    for (int i = 0; i < pin1.GetLength(0); i++)
    {
        preNeg++ ? pin1[i, 0] < 0 : prePos++; //not working
        pin2[i, 0] < 0 ? postNeg++ : postPos++; //not working
    }

因此条件是如果pin1[i, 0]小于零,preNeg增加1。其他prePos应该被激怒。我可以通过正常情况做到这一点,否则为什么这个三元组不起作用?

2 个答案:

答案 0 :(得分:4)

三元运算符是一个运算符,它计算表达式(表示值的东西),因此不能用作语句,而不能使用+的表达式作为陈述(1+1;作为陈述是非法的。)

使三元运算符的这种特殊用法有点不同的是使用增量(++)运算符。使用++运算符对变量执行操作(将其递增1),并输出一个值(变量之后++放置时变量值增加之前的变量值)。

因此,以下内容将实现您的目标,但之后您将留下一个未使用的变量(更不用说不清楚的代码),因此我无法看到它在实践中被使用。

var currentValue = pin1[i, 0] < 0 ? postNeg++ : postPos++;

正如已经提到的,最好的选择是使用正常if / else。这就是它的用途。

答案 1 :(得分:3)

    preNeg++ ? pin1[i, 0] < 0 : prePos++; //not working
    pin2[i, 0] < 0 ? postNeg++ : postPos++; //not working

因为三元运算符返回分配给变量或属性的值;

喜欢

int a = true ? 1 : 0;

a将有1

三元运算符的语法是

var variable = condition ? 
              value_to_return_in_variable_if_condition_true :  
              value_to_return_in_variable_if_condition_false;

此外,三元运算符用于为单个变量赋值。不要两个变量。