【问题标题】:Having a problem using switches in C#在 C# 中使用开关时遇到问题
【发布时间】:2017-12-31 22:21:27
【问题描述】:

我在代码行中收到错误“A switch expression or case label must be a bool, char, string, integer, enum, or对应的可空类型”,

switch (job_selecter.SelectedValue)

这是我的代码:

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

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

【问题讨论】:

  • job_selector.SelectedValue 是什么类型?
  • job_selecter.SelectedValue 是什么类型?
  • job_selecter.SelectedValue 是什么类型?
  • job_selecter 是 Visual Studio 中的一个组合框,其中包含一堆字符串。我不知道它是什么类型...对不起。会是字符串吗?
  • 切线地,Ravager's Seal 仅提供 +16 闪电抗性加值;几乎不值得从鲁珀特 (Rupert the Freebooter) 那里购买 23000 个混沌碎片。

标签: c# switch-statement


【解决方案1】:

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

【讨论】:

  • 哎呀,我不小心回复了下面的错误评论。正如你上面所说的,我添加了 (int),但它告诉我我有一个 NullReferenceException 是未处理的错误。这是否意味着它不是正确的类型?
  • 没关系。我错过了你输入的一行,它起作用了。非常感谢!
  • 好的,所以现在当我尝试添加其他案例时,我在 int index = (int)job_selecter.SelectedValue; 上再次收到 NullReferenceException is unhandled 错误。线。这是为什么呢?
  • @Ben 这是因为在计算该表达式时组合框中没有选定的值,或者 job_selecter 本身未设置为对象(试图引用 NULL 对象的 SelectedValue 等属性导致 NullReferenceException)
【解决方案2】:

看来你真正想做的是:

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

    default:
        // handle default case
        break;
}

您在其中一个回复中指出,将 SelectedValue 转换为 stringint 或任何可能导致空引用异常的东西,如果您随后在 switch 中使用它 - 这非常有意义,因为它是选择 nothing 的组合框完全合法,您需要考虑这种情况。如果您打开 SelectedIndex,处理 -1 将允许您专门处理“无选择”的情况。

当然,值得指出的是,只有当组合框包含已知的、不变的 值集时,打开SelectedIndex 才有意义。添加或删除值可能会导致框中所有内容的索引发生变化,从而破坏开关。

【讨论】:

  • 此外,如果组合框的 Sorted 属性为 true,则添加新项目可能会破坏索引。
  • 谢谢,这解决了我的问题。
【解决方案3】:

SelectedValue 是一个object。将其转换为开关中的int

【讨论】:

  • 对不起,我是编码新手。 job_selecter 是 Visual Studio 中的一个组合框。它包含一堆字符串。
  • @Ben - 我不认为有任何道歉的理由;只有知道了答案,这才容易。
  • 我按照你说的把 (int) 放在了前面,但是编译时又给了我一个错误:nullreferenceexception is unhandled
【解决方案4】:

您可能打算使用 "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...
} 

【讨论】:

    【解决方案5】:

    你应该先把你的 SelectedIndex 变成一个 int 来处理这个错误““A switch expression or case label must be a bool, char, string, integer, enum, or对应的可空类型”在我的代码行":

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

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2015-10-21
      相关资源
      最近更新 更多