在C#中使用开关时遇到问题

问题描述 投票:0回答:5

我在行中的代码中收到错误“切换表达式或大小写标签必须是bool,char,string,integral,enum或相应的可空类型”,

switch (job_selecter.SelectedValue)

这是我的代码:

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

谁能告诉我为什么会发生这种情况以及如何解决这个问题?谢谢!

c# switch-statement
5个回答
3
投票

看起来你真正想做的就是:

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

    default:
        // handle default case
        break;
}

你已经注意到你的一个回复中将SelectedValue转换为stringint或任何可能导致空引用异常的情况,如果你在交换机中使用它 - 这是完全合理的,因为它对于组合框没有任何东西是完全合法的已选中,您将需要考虑该案例。如果您打开SelectedIndex,处理-1将允许您专门处理“无选择”的情况。

当然,值得指出的是,如果组合框包含一组已知的,不变的值,那么切换SelectedIndex才有意义。添加或删除值可能会导致框中所有内容的索引发生更改,从而破坏了切换。


5
投票

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

2
投票

SelectedValue是一个object。把它投到开关中的int


1
投票

您可能打算使用“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
投票

您应该首先将SelectedIndex放入int中,以处理此错误“”切换表达式或大小写标签必须是bool,char,string,integral,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;
}
© www.soinside.com 2019 - 2024. All rights reserved.