Ошибка при попытке использовать тернарный оператор в C#

Вот мой код:

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

Что я напутал? Спасибо!


person Community    schedule 29.11.2010    source источник
comment
Недопустимое выражение '?' - Спасибо за помощь!   -  person    schedule 29.11.2010
comment
Я обновлю вопрос со всем методом.   -  person    schedule 29.11.2010


Ответы (6)


Либо сделайте это:

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

...или это:

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

Или отказаться от проверки и сделать так:

chkSelected.Checked = !chkSelected.Checked;
person Tim Robinson    schedule 29.11.2010
comment
Я возьму дверь номер два! Это похоже на то, что я пойму, если буду читать дальше. Спасибо за помощь! - person ; 29.11.2010

Запишите это как

chkSelected.Checked = !chkSelected.Checked

вместо.

Чтобы переписать ваш точный пример, он становится беспорядочным:

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

В этом случае оператор ?: возвращает либо true, либо false. Он не может выполнять задание.

person Øyvind Bråthen    schedule 29.11.2010

Вы используете присваивание вместо сравнения, и вам не нужен там if. На самом деле не совсем понятно, каково ваше намерение, но я предполагаю, что оно таково:

chkSelected.Checked = !chkSelected.Checked;
person Kobi    schedule 29.11.2010

Почему бы не сделать:

chkSelected.Checked = !chkSelected.Checked;

Кроме того, он не компилируется из-за if, который вы ставите перед ним. Удалите это, и это тоже будет работать!

person Arcturus    schedule 29.11.2010

Я думаю, вы имеете в виду:

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

который можно сократить до:

chkSelected.Checked=!chkSelected.Checked
person Sean    schedule 29.11.2010

Потому что вы должны использовать как назначение:

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

Тернарный оператор используется как присваивание

Но здесь не очень хорошая идея делать это здесь и делать

chkSelected.Checked =!chkSelected.Checked;

Короче путь..

person bAN    schedule 29.11.2010