开发者

Having a problem using switches in C#

I'm getting the error "A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type" in 开发者_如何学编程my code at the line,

switch (job_selecter.SelectedValue)

Here's my code:

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

Could anyone tell me why this is happening and how I can fix it? Thanks!


job_selecter.SelectedValue is probably an object.

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


It seems like what you really want to do is this:

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

    default:
        // handle default case
        break;
}

You've noted in one of your responses that casting SelectedValue to string or int or whatever can cause a null reference exception if you then use it in a switch--which makes perfect sense, because it's perfectly legal for a combo box to have nothing selected, and you're going to need to account for that case. If you switch on SelectedIndex, handling -1 will allow you to handle a case of "no selection" specifically.

Of course, it's worth pointing out that switching on SelectedIndex only makes sense if the combo box contains a known, unchanging set of values. Adding or removing values will potentially cause the indices of everything in the box to change, thus breaking the switch.


SelectedValue is an object. cast it to an int in the switch.


You might have meant to use "SelectedIndex" property (a zero based number corresponding to your selection in combo OR a -1 when nothing is selected):

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


You should get your SelectedIndex into an int first, to deal with this error " "A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type" in my code at the line":

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜