尝试在C#中使用三元运算符时出错

时间:2010-11-29 12:47:13

标签: c# ternary-operator

这是我的代码:

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;
    }
}

我搞砸了什么?谢谢!

6 个答案:

答案 0 :(得分:4)

要么这样做:

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

......或者这个:

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

或放弃支票并执行此操作:

chkSelected.Checked = !chkSelected.Checked;

答案 1 :(得分:1)

将其写为

chkSelected.Checked = !chkSelected.Checked

代替。

要重写你的确切示例,它会像这样凌乱:

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

在这种情况下,?:运算符会返回truefalse。它无法执行任务。

答案 2 :(得分:1)

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

chkSelected.Checked = !chkSelected.Checked;

答案 3 :(得分:0)

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

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

三元运算符像分配一样使用

但是这里做这件事并不是一个好主意

chkSelected.Checked =!chkSelected.Checked;

缩短方式..

答案 4 :(得分:0)

为什么不这样做:

chkSelected.Checked = !chkSelected.Checked;

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

答案 5 :(得分:0)

我认为你的意思是:

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

可以缩短为:

chkSelected.Checked=!chkSelected.Checked