2010-01-11 100 views
0

我想切換isFollowing的值。如果這是真的,我想isFollowing = false並且相反。C#條件語句

而不是我使用的'if'語句? :

 isFollowing == true ? isFollowing = false : isFollowing = true; 

但這不起作用。它給出「只有賦值,調用,遞增,遞減和新的對象表達式可以用作語句」 這是爲什麼?

在此先感謝

+8

爲什麼不直接使用'isFollowing = isFollowing;'? – kennytm 2010-01-11 19:30:18

+4

做正在做的事情的正確方法是'isFollowing == true?假:真;'。但是'isFollowing =!isFollowing'更簡單,更直接和習慣。 – 2010-01-11 19:31:32

+0

http://stackoverflow.com/questions/237241/what-c​​oding-mistakes-are-a-telltale-giveaway-of-an-inexperienced-programmer/237247#237247 – 2010-01-11 19:32:12

回答

16

如果你想保持它作爲一個三元,你可以做

isFollowing = (isFollowing == true ? false : true); 

然而,這是一個更短的等價:

isFollowing = !isFollowing; 

之所以你的代碼沒有工作是三元本身就是一種表達,並不是所有的表達都是有效的陳述。通過將它轉換爲一個三元值的賦值,它就成爲一個聲明。

只要符合運算符優先級規則,您的代碼就很可能在C中有效,但C#不允許您這樣做。作爲一種慣例,最好限制你的三元分支無論如何都不要有副作用,即使語言允許你這樣做。

+0

如果你打算給一個三元版本,至少給一個沒有冗餘的聲明:'isFollowing = isFollowing? false:true;'isFollowing == true'是不必要的。 – jason 2010-01-11 19:40:57

+0

這是真的,但我試圖說明他的代碼的最接近的工作版本。無論如何,三元論是不必要的,這一點已被消除。 – Crast 2010-01-11 19:45:57

10

用途:

isFollowing = !isFollowing; 

要使用的三元運算符,使這項工作:

isFollowing = isFollowing ? false : true; 

但不這樣做,只是使用的第一個版本。

你之所以有不工作是什麼,因爲三元運算符的形式

conditon ? expression_if_condition_is_true : expression_if_condition_is_false; 

的這個計算結果爲表達式(expression_if_condition_is_true如果conditiontrueexpression_if_condition_is_false如果conditionfalse)。表達式不能用作語句,除非它們是方法調用,增量(即i++),遞減,使用new的分配和賦值。

1

顯然一個更簡單的方法是:

isFollowing = !isFollowing; 

以其它方式使用:

isFollowing = isFollowing ? false : true; 
1

你得到錯誤的原因是,您在expresion中間有一個任務:

isFollowing == true ? isFollowing = false : isFollowing = true; 
           ^
           here 

三元運算符是一個表達式,你不能擁有這種類型的表達式本身,你需要將它分配給某些東西。

其他的答案在這裏給你如何重寫它的解決方案:

isFollowing = !isFollowing;