Ошибка при попытке использовать троичный оператор в C # - PullRequest
0 голосов
/ 29 ноября 2010

Вот мой код:

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 ]

4 голосов
/ 29 ноября 2010

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

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

... или это:

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

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

chkSelected.Checked = !chkSelected.Checked;
1 голос
/ 29 ноября 2010

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

chkSelected.Checked = !chkSelected.Checked;
1 голос
/ 29 ноября 2010

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

chkSelected.Checked = !chkSelected.Checked

.

Чтобы переписать ваш точный пример, он выглядит так:в этом случае либо true, либо false.Невозможно выполнить назначение.

0 голосов
/ 29 ноября 2010

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

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

, которое можно сократить до:

chkSelected.Checked=!chkSelected.Checked
0 голосов
/ 29 ноября 2010

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

chkSelected.Checked = !chkSelected.Checked;

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

0 голосов
/ 29 ноября 2010

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

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

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

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

chkSelected.Checked =!chkSelected.Checked;

Короткий путь ..

...