if语句方式的区别…

本文关键字:区别 方式 语句 if | 更新日期: 2023-09-27 17:49:25

我正在尝试使用if语句的速记符号来缩短以下内容:

if (DCC.systemFlags[1]) { sf0CheckBox.Checked = true; } else { sf0CheckBox.Checked = false; }

和使用下面的代替:

DCC.systemFlags[1] ? sf1CheckBox.Checked = true : sf1CheckBox.Checked = false;

然而,我不确定为什么我得到以下错误:

Only assignment, call, increment, decrement, and new object expressions can be used as a statement

正确的写法是什么?

DCC.systemFlags[]bools的数组。

谢谢。

if语句方式的区别…

你真正想要的是:

sf0CheckBox.Checked = DCC.systemFlags[1] 

在这种情况下,您真正需要的是:

sf1CheckBox.Checked = DCC.systemFlags[1];

但是如果你真的想使用三元操作符,可以这样做:

sf1CheckBox.Checked = DCC.systemFlags[1] ? true : false;
问题是三元操作符使用以下语法:
[condition] ? [expression] : [expression]

[expression] s必须求值(如5 + 1),不能是语句(如a = 5 + 1)。

没有通用if语句的简写。

在c#语法中,

一个语句是三元操作符。(

编辑:看一下别人的回答来速记这个特殊的 if语句。

如果你只想把其中一个标志的值赋给Checked属性,你只需要这样做:

sf0CheckBox.Checked = DCC.systemFlags[1]

进一步回答你的问题,三元运算符期望返回一个值——它不是if() {}结构的替代品。

三元操作符语句

a = b ? foo : bar;

直接翻译成

if (b) { a = foo; } else { b = bar; }

你得到这个错误,因为你所有的是你的表达式的后一部分(即b ? foo : bar部分)。您不会在任何地方使用这段代码。它没有赋值,没有调用,没有递增或递减也绝对没有创建新对象。因此,它不是一个有效的语句,因此出现错误。

这是糟糕的编码风格,但是像这样的东西应该可以工作:

bool sink = DCC.systemFlags[1] ? sf1CheckBox.Checked = true : sf1CheckBox.Checked = false;

只是因为现在你实际上在做一些事情(分配给sink)。

让我再次重申糟糕的编码风格。你会做得更好,重构你的代码,以满足其他人在他们的答案中所说的。