0

这是我的代码:

public void ToggleCheckBox()
{   
    if (chkSelected.Checked) ? chkSelected.Checked = false : chkSelected.Checked = true;

    //This works, but I want to write it using a ternary.
    if (chkSelected.Checked)
    {
        chkSelected.Checked = false;
    }
    else
    {
        chkSelected.Checked = true;
    }
}

我搞砸了什么?谢谢!

4

6 回答 6

4

要么这样做:

if (chkSelected.Checked) chkSelected.Checked = false; else chkSelected.Checked = true;

...或这个:

chkSelected.Checked = chkSelected.Checked ? false : true;

或者放弃检查并执行以下操作:

chkSelected.Checked = !chkSelected.Checked;
于 2010-11-29T12:50:30.593 回答
1

把它写成

chkSelected.Checked = !chkSelected.Checked

反而。

要重写您的确切示例,它会变得像这样混乱:

chkSelected.Checked =  (chkSelected.Checked) ? false : true;

在这种?:情况下,运算符返回或者truefalse。它不能执行赋值。

于 2010-11-29T12:49:26.537 回答
1

您正在使用分配而不是比较,并且您不需要if那里。事实上,你的意图并不太清楚,但我猜它是:

chkSelected.Checked = !chkSelected.Checked;
于 2010-11-29T12:49:41.080 回答
0

因为您必须像分配一样使用:

 chkSelected.Checked =(chkSelected.Checked ? false : true);

三元运算符像赋值一样使用

但是在这里这样做并不是一个好主意

chkSelected.Checked =!chkSelected.Checked;

短途..

于 2010-11-29T12:49:06.870 回答
0

为什么不这样做:

chkSelected.Checked = !chkSelected.Checked;

此外,它不会编译,因为if你放在它前面。删除它,它也会起作用!

于 2010-11-29T12:49:40.953 回答
0

我想你的意思是:

chkSelected.Checked=(chkSelected.Checked ? false : true)

可以缩短为:

chkSelected.Checked=!chkSelected.Checked
于 2010-11-29T12:49:59.687 回答