有人可以告诉我为什么下面的代码不起作用吗?
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
应该被激怒。我可以通过正常情况做到这一点,否则为什么这个三元组不起作用?
答案 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;
此外,三元运算符用于为单个变量赋值。不要两个变量。