2012-07-02 39 views
1

有人能告訴我爲什麼下面的代碼不工作?對增量整數三元操作符

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應該被引用。我可以通過正常方式做到這一點,但爲什麼這個三元不工作?

+0

三元運算的結果是一個表達式。這與編寫'3;'作爲一行代碼相同。這不起作用。 – fero

+0

如果你可以通過正常方式來做到這一點,可能更具可讀性,考慮到你確實需要其他條件,爲什麼你不這樣做? – JonH

+0

我只是很好! –

回答

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

因爲三元運算符返回分配給變量或屬性的值;

int a = true ? 1 : 0; 

一個將具有三元運算的1個

語法是

var variable = condition ? 
       value_to_return_in_variable_if_condition_true : 
       value_to_return_in_variable_if_condition_false; 

此外三元運算符被用來值分配給一個單個可變。不是兩個變量。

3

三元運算符是一個操作者其評估爲表達式(一些指示的值),因此不能再使用作爲語句比使用+的表達可以作爲一個聲明(1+1;是非法一份聲明)。

是什麼讓這個特殊的使用三元運算稍有不同的是採用增量(++)運算符。使用操作者++在可變執行操作(以一增加的話),以及輸出一個值(當前放置++可變後,這是遞增的變量的值)。

因此,下面將實現你正在試圖做的,但那麼你會留下一個未使用的變量(更不用說不清楚代碼),所以我不能看到這是在實踐中使用。

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

正如已經提到的,最好的辦法是去同一個正常if/else。這就是它的目的。

+0

另一種方式來做到這一點: 「preNeg + =銷[I,0] <1:0:(++ prePos == prePos 0:0);?」。不過,有人應該殺了你。 – lesderid