我在行中的代码中收到错误“切换表达式或大小写标签必须是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
转换为string
或int
或任何可能导致空引用异常的情况,如果你在交换机中使用它 - 这是完全合理的,因为它对于组合框没有任何东西是完全合法的已选中,您将需要考虑该案例。如果您打开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;
}