我想切换isFollowing的值。如果这是真的,我想要isFollowing = false,反之亦然。
而不是我使用的'if'语句? :
isFollowing == true ? isFollowing = false : isFollowing = true;
但这不起作用。它给出“只有赋值,调用,递增,递减和新对象表达式才能用作语句” 那是为什么?
提前致谢
答案 0 :(得分:16)
如果您想将其保留为三元组,则可以
isFollowing = (isFollowing == true ? false : true);
然而,这是一个更短的等价物:
isFollowing = !isFollowing;
您的代码不起作用的原因是三元组本身就是一个表达式,并非所有表达式都是有效的语句。通过将其转换为三元值的赋值,它就成了一个陈述。
您的代码很可能在C中有效,只要它满足运算符优先级规则,但C#将不允许您这样做。作为一种做法,最好将三元分支限制为无副作用,即使语言允许你这样做。
答案 1 :(得分:10)
使用:
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
和分配的分配。
答案 2 :(得分:1)
当然更简单的方法是:
isFollowing = !isFollowing;
否则使用?:
isFollowing = isFollowing ? false : true;
答案 3 :(得分:1)
您收到错误的原因是您在展示过程中有作业:
isFollowing == true ? isFollowing = false : isFollowing = true;
^
here
三元运算符是一个表达式,你不能自己拥有这种类型的表达式,你需要将它分配给某个东西。
这里的其他答案为您提供了如何重写它的解决方案:
isFollowing = !isFollowing;