我想切换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