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
的数组。
谢谢。
你真正想要的是:
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
语句的简写。
一个语句不是三元操作符。(
编辑:看一下别人的回答来速记这个特殊的 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
)。
让我再次重申糟糕的编码风格。你会做得更好,重构你的代码,以满足其他人在他们的答案中所说的。