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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中使用开关时遇到问题相关的知识,希望对你有一定的参考价值。

我在行中的代码中收到错误“切换表达式或大小写标签必须是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;
        }
    }

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

答案

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

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

    default:
        // handle default case
        break;
}

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

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

另一答案

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;
        }
    }
另一答案

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

另一答案

您可能打算使用“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...
} 
另一答案

您应该首先将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;
}

以上是关于在C#中使用开关时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

C# 8 开关表达式

在代码片段中包含类型转换

Android:使用支持片段管理器时复制片段

Jquery if复选框是否已选中Bootstrap开关

Android:BottomNavigationView第一个片段开关超级延迟

Qt编程遇到的问题,我在qt中直接使用C语言的程序片段,有问题 ,求解