C# 条件语句
Posted
技术标签:
【中文标题】C# 条件语句【英文标题】:C# conditional statement 【发布时间】:2010-01-11 19:28:38 【问题描述】:我想切换 isFollowing 的值。如果它是真的,我想要 isFollowing = false 和相反的。
我使用的不是“if”语句? :
isFollowing == true ? isFollowing = false : isFollowing = true;
但这不起作用。它给出了“只有赋值、调用、递增、递减和新对象表达式可以用作语句” 这是为什么呢?
提前致谢
【问题讨论】:
为什么不直接使用isFollowing = !isFollowing;
?
正确的做法是isFollowing == true ? false : true;
。但是isFollowing = !isFollowing
更简单、更直接、更惯用。
***.com/questions/237241/…
当然! :) 愚蠢的问题.. 抱歉
【参考方案1】:
如果你想把它保持为三元组,你可以这样做
isFollowing = (isFollowing == true ? false : true);
但是,这是一个更短的等价物:
isFollowing = !isFollowing;
您的代码不起作用的原因是三元组本身就是一个表达式,并非所有表达式都是有效的语句。通过将其转换为对三元值的赋值,它就变成了一条语句。
只要满足运算符优先规则,您的代码很可能在 C 中有效,但 C# 不允许您这样做。作为一种实践,最好将您的三元分支限制为无论如何都不会产生副作用,即使语言允许您这样做。
【讨论】:
如果你要给出一个三元版本,至少给出一个没有冗余的声明:isFollowing = isFollowing ? false : true;
isFollowing == true
是不必要的。
这是真的,但我试图说明他的代码最接近的工作版本。无论如何,三元组是不必要的,这一事实消除了这一点。【参考方案2】:
用途:
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
的分配和赋值。
【讨论】:
【参考方案3】:当然更简单的方法是:
isFollowing = !isFollowing;
否则使用 ?:
isFollowing = isFollowing ? false : true;
【讨论】:
【参考方案4】:您收到错误的原因是您在表达式中间有一个赋值:
isFollowing == true ? isFollowing = false : isFollowing = true;
^
here
三元运算符是一个表达式,你不能单独拥有这种类型的表达式,你需要将它赋值给某个东西。
这里的其他答案为您提供了如何重写它的解决方案:
isFollowing = !isFollowing;
【讨论】:
以上是关于C# 条件语句的主要内容,如果未能解决你的问题,请参考以下文章