Возникли проблемы с использованием переключателей в C # - PullRequest
0 голосов
/ 01 сентября 2011

Я получаю сообщение об ошибке "Выражение переключателя или метка регистра должны иметь тип bool, char, string, целое число, перечисление или соответствующий обнуляемый тип" в моем коде в строке,

switch (job_selecter.SelectedValue)

Вот мой код:

    private void start()
    {
        switch (job_selecter.SelectedValue)
        {
            case 0:
                head_seal_label.Text = "Ravager's Seal: Head (8)";
                break;
        }
    }

Может кто-нибудь сказать мне, почему это происходит и как я могу это исправить? Спасибо!

Ответы [ 5 ]

5 голосов
/ 01 сентября 2011

job_selecter.SelectedValue вероятно объект.

 private void start()
    {
        int index = (int)job_selecter.SelectedValue;
        switch (index )
        {
            case 0:
                head_seal_label.Text = "Ravager's Seal: Head (8)";
                break;
        }
    }
3 голосов
/ 01 сентября 2011

Похоже, что вы действительно хотите сделать это:

switch(job_selecter.SelectedIndex)
{
    case 0:
        // do whatever
        break;

    default:
        // handle default case
        break;
}

Вы отметили в одном из своих ответов, что приведение SelectedValue к string или int или к чему-либо еще может вызвать исключение нулевой ссылки, если вы затем используете его в переключателе - что имеет смысл, потому что это Совершенно законно, что в комбинированном окне выбрано ничего , и вам придется учитывать этот случай. Если вы включите SelectedIndex, обработка -1 позволит вам обрабатывать случай «без выбора», в частности.

Конечно, стоит отметить, что включение SelectedIndex имеет смысл, только если в поле со списком содержится известный, неизменный набор значений. Добавление или удаление значений может привести к изменению индексов всего в блоке, что приведет к поломке переключателя.

2 голосов
/ 01 сентября 2011

Выбранное значение равно object.приведите его к int в коммутаторе.

1 голос
/ 01 сентября 2011

Возможно, вы хотели использовать свойство "SelectedIndex" (число, начинающееся с нуля, соответствующее вашему выбору в комбо, ИЛИ -1, если ничего не выбрано):

switch (job_selecter.SelectedIndex)
{
    case 0:
        head_seal_label.Text = "Ravager's Seal: Head (8)";
        break;
    // other cases for other Indices
    case -1:
    default:
        // handle nothing selected...
} 
0 голосов
/ 01 сентября 2011

Вы должны сначала поместить свой SelectedIndex в int, чтобы справиться с этой ошибкой "" Выражение переключателя или метка регистра должны быть в виде кода типа bool, char, string, целочисленного типа, enum или соответствующего нуля "в моей строке":

int index;
if(!Int32.TryParse(job_selector.SelectedIndex.ToString(), out index))
{
    index = -1;
}
//All your other cases here    
switch(index)
{
    case 0:
        head_seal_label.Text = "Ravager's Seal: Head (8)";
        break;

    default:
        head_seal_label.Text = "Some default Value";
        break;
}
...