c# - 如何控制组合框结果在 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!!");
}
}
}
解决方案
我认为 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
案例进行处理的兴趣,这将是最直接的方法。
推荐阅读
- ios - swift / CoreData - 为数据模型创建“虚拟”NSManagedObjecID(无需托管对象即可测试事物)
- angular - 如何使用 Web SDK 执行基于 Fire 的电话身份验证?
- ios - 删除 UITextField 中的重复条目
- c# - 无法使用 Postman 从数据库获取数据,但 POST 工作正常
- angular - 焦点上的垫子输入不起作用Angular7
- python - 在python中如何替换稀疏csr_matrix中的nan
- sql - 如何使表列在插入期间始终使用默认值?
- javascript - 输入字段验证存在问题
- php - 为什么 stdClass 和匿名类在 assertEquals() 中的行为不同?
- css - 在一个复杂选择器中选择两个类