C#条件语句

jos*_*ose 0 c# conditional

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

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

        isFollowing == true ? isFollowing = false : isFollowing = true;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它给出了"只有赋值,调用,递增,递减和新对象表达式才能用作语句"为什么会这样?

提前致谢

Cra*_*ast 16

如果你想把它作为三元组,你可以做到

isFollowing = (isFollowing == true ? false : true);
Run Code Online (Sandbox Code Playgroud)

但是,这是一个短得多的等价物:

isFollowing = !isFollowing;
Run Code Online (Sandbox Code Playgroud)

你的代码不起作用的原因是三元组本身就是一个表达式,并不是所有的表达式都是有效的语句.通过将其转换为三元值的赋值,它就成了一个陈述.

您的代码很可能在C中有效,只要它满足运算符优先级规则,但C#将不允许您这样做.作为一种做法,最好将三元分支限制为无副作用,即使语言允许你这样做.


jas*_*son 10

使用:

isFollowing = !isFollowing;
Run Code Online (Sandbox Code Playgroud)

为了使用三元运算符来完成这项工作:

isFollowing = isFollowing ? false : true;
Run Code Online (Sandbox Code Playgroud)

但是不要这样做,只需使用第一个版本.

你所拥有的东西不起作用的原因是因为三元运算符的形式

conditon ? expression_if_condition_is_true : expression_if_condition_is_false;
Run Code Online (Sandbox Code Playgroud)

并且这会计算表达式(expression_if_condition_is_true如果conditiontrue,expression_if_condition_is_false如果conditionfalse).表达式不能用作语句,除非它们是方法调用,增量(即i++),减量,使用new和分配的分配.