C#条件语句

时间:2010-01-11 19:28:38

标签: c# conditional

我想切换isFollowing的值。如果这是真的,我想要isFollowing = false,反之亦然。

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

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

但这不起作用。它给出“只有赋值,调用,递增,递减和新对象表达式才能用作语句” 那是为什么?

提前致谢

4 个答案:

答案 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_truecondition则表达式为trueexpression_if_condition_is_falsecondition时为false。表达式不能用作语句,除非它们是方法调用,增量(即i++),减量,使用new和分配的分配。

答案 2 :(得分:1)

当然更简单的方法是:

isFollowing = !isFollowing;

否则使用?:

isFollowing = isFollowing ? false : true;

答案 3 :(得分:1)

您收到错误的原因是您在展示过程中有作业:

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

三元运算符是一个表达式,你不能自己拥有这种类型的表达式,你需要将它分配给某个东西。

这里的其他答案为您提供了如何重写它的解决方案:

isFollowing = !isFollowing;