我想切換isFollowing的值。如果這是真的,我想isFollowing = false並且相反。C#條件語句
而不是我使用的'if'語句? :
isFollowing == true ? isFollowing = false : isFollowing = true;
但這不起作用。它給出「只有賦值,調用,遞增,遞減和新的對象表達式可以用作語句」 這是爲什麼?
在此先感謝
我想切換isFollowing的值。如果這是真的,我想isFollowing = false並且相反。C#條件語句
而不是我使用的'if'語句? :
isFollowing == true ? isFollowing = false : isFollowing = true;
但這不起作用。它給出「只有賦值,調用,遞增,遞減和新的對象表達式可以用作語句」 這是爲什麼?
在此先感謝
如果你想保持它作爲一個三元,你可以做
isFollowing = (isFollowing == true ? false : true);
然而,這是一個更短的等價:
isFollowing = !isFollowing;
之所以你的代碼沒有工作是三元本身就是一種表達,並不是所有的表達都是有效的陳述。通過將它轉換爲一個三元值的賦值,它就成爲一個聲明。
只要符合運算符優先級規則,您的代碼就很可能在C中有效,但C#不允許您這樣做。作爲一種慣例,最好限制你的三元分支無論如何都不要有副作用,即使語言允許你這樣做。
用途:
isFollowing = !isFollowing;
要使用的三元運算符,使這項工作:
isFollowing = isFollowing ? false : true;
但不這樣做,只是使用的第一個版本。
你之所以有不工作是什麼,因爲三元運算符的形式
conditon ? expression_if_condition_is_true : expression_if_condition_is_false;
的這個計算結果爲表達式(expression_if_condition_is_true
如果condition
是true
和expression_if_condition_is_false
如果condition
是false
)。表達式不能用作語句,除非它們是方法調用,增量(即i++
),遞減,使用new
的分配和賦值。
顯然一個更簡單的方法是:
isFollowing = !isFollowing;
以其它方式使用:
isFollowing = isFollowing ? false : true;
你得到錯誤的原因是,您在expresion中間有一個任務:
isFollowing == true ? isFollowing = false : isFollowing = true;
^
here
三元運算符是一個表達式,你不能擁有這種類型的表達式本身,你需要將它分配給某些東西。
其他的答案在這裏給你如何重寫它的解決方案:
isFollowing = !isFollowing;
爲什麼不直接使用'isFollowing = isFollowing;'? – kennytm 2010-01-11 19:30:18
做正在做的事情的正確方法是'isFollowing == true?假:真;'。但是'isFollowing =!isFollowing'更簡單,更直接和習慣。 – 2010-01-11 19:31:32
http://stackoverflow.com/questions/237241/what-coding-mistakes-are-a-telltale-giveaway-of-an-inexperienced-programmer/237247#237247 – 2010-01-11 19:32:12