我想切换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如果condition是true,expression_if_condition_is_false如果condition是false).表达式不能用作语句,除非它们是方法调用,增量(即i++),减量,使用new和分配的分配.