[英]C# conditional statement
我想切换isFollowing的值。 如果是真的,我要isFollowing = false,反之亦然。
我使用的不是'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;
出现错误的原因是在表达式中间有一个赋值:
isFollowing == true ? isFollowing = false : isFollowing = true;
^
here
三元运算符是一个表达式,您不能单独拥有这种类型的表达式,需要将其分配给某些对象。
这里的其他答案为您提供有关如何重写它的解决方案:
isFollowing = !isFollowing;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.