if语句之间的区别......?

时间:2011-04-08 22:56:20

标签: c#

我正在尝试使用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的数组。

谢谢。

5 个答案:

答案 0 :(得分:4)

你真正想要的是:

sf0CheckBox.Checked = DCC.systemFlags[1] 

答案 1 :(得分:3)

在这种情况下你真正想要的是:

sf1CheckBox.Checked = DCC.systemFlags[1];

但是如果你真的想使用三元运算符,那就是这样做的方法:

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

问题是三元运算符使用以下语法:

[condition] ? [expression] : [expression]

[expression]必须评估为某个值(例如5 + 1),并且不能是语句(例如a = 5 + 1)。

答案 2 :(得分:2)

通用if声明没有简写。

在C#语法中,一个语句三元运算符 make。 :(

编辑:查看其他人的答案,以获取此特定 if声明的简写。

答案 3 :(得分:2)

如果您只想将其中一个标志的值分配给Checked属性,您只需要:

sf0CheckBox.Checked = DCC.systemFlags[1]

除了您的问题之外,三元运算符还希望返回一个值 - 它不能替代if() {}构造。

答案 4 :(得分:0)

三元运算符声明

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)。

让我再次重申糟糕的编码风格。您可以更好地将代码重构为其他人在答案中所说的内容。