2

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

    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加一。否则prePos应该被取消。如果其他情况,我可以正常执行此操作,但为什么这个三元组不起作用?

4

2 回答 2

4

三元运算符是一个计算结果为表达式(指示值的东西)的运算符,因此不能再用作语句,就像表达式 using+可以用作语句一样(作为语句1+1;是非法的)。

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

因此,以下内容将实现您想要做的事情,但是您将留下一个未使用的变量(更不用说不清楚的代码),所以我看不到它在实践中的使用。

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

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

于 2012-07-02T13:47:48.260 回答
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;

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

于 2012-07-02T13:36:59.343 回答