Грешка при опит за използване на троичен оператор в 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