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 如果conditiontrueexpression_if_condition_is_false 如果conditionfalse)。表达式不能用作语句,除非它们是方法调用、增量(即i++)、减量、使用new 的分配和赋值。

【讨论】:

【参考方案3】:

当然更简单的方法是:

isFollowing = !isFollowing;

否则使用 ?:

isFollowing = isFollowing ? false : true;

【讨论】:

【参考方案4】:

您收到错误的原因是您在表达式中间有一个赋值:

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

三元运算符是一个表达式,你不能单独拥有这种类型的表达式,你需要将它赋值给某个东西。

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

isFollowing = !isFollowing;

【讨论】:

以上是关于C# 条件语句的主要内容,如果未能解决你的问题,请参考以下文章

C#整理 条件语句

C# 条件语句

c#基础语句——分支语句

c#基础语句——分支语句的应用

c# linq 动态多条件查询语句的写法

C# 判断