首页 > 解决方案 > 如何控制组合框结果在 switch-case 中何时为空

问题描述

我尝试这样做:1.单击按钮-> 2.检查combobox.selectedItem-> 3.做某事

但如果未选择组合框,则 switch-case 将返回 null 异常

我用 try-catch 解决了这个问题,但我正在寻找方法可以 switch-case 在没有 try-catch 的情况下处理“null”结果

我认为 default: 可以处理这个但它不能

我该怎么办?

这是例如我的代码

private void button_Click(object sender, EventArgs e)
        {
            using (OleDbConnection conn = new OleDbConnection(constr))
            {
                try
                {
                    switch (comboBox.SelectedItem.ToString())
                    {
                        case "something1":
                            textBox1.Text = "111";
                            break;
                        case "something2":
                            textBox1.Text = "111";
                            break;
                        case "something3":
                            textBox1.Text = "111";
                            break;
                        default:
                            MessageBox.Show("select combobox!");
                            break;
                    }
                }
                catch ( Exception ex)
                {
                    MessageBox.Show("select combobox!!");
                } 
    }
}

标签: c#

解决方案


我认为 default: 可以处理这个但它不能

它可以,但您仍然必须确保为该switch语句计算一个有效的表达式。

您可以使用?.(null 条件) 运算符执行以下操作:

using (OleDbConnection conn = new OleDbConnection(constr))
{
    switch (comboBox.SelectedItem?.ToString())
    {
        case "something1":
            textBox1.Text = "111";
            break;
        case "something2":
            textBox1.Text = "111";
            break;
        case "something3":
            textBox1.Text = "111";
            break;
        default:
            MessageBox.Show("select combobox!");
            break;
    }
}

如果SelectedItem为空,则整个表达式将“短路”,即不会继续尝试评估ToString()方法调用。相反,表达式的值将是null. 由于null不匹配任何显式case语句,因此default将执行该案例。

您可以通过多种其他方式来处理可能为空的值,但考虑到您的原始代码以及您对使用default案例进行处理的兴趣,这将是最直接的方法。


推荐阅读