当我使用
时,在comboBox_SelectedIndexChanged中 if (comboBox2.SelectedItem == "1")
{
MessageBoxEx.Show("Ok1");
}
if (comboBox2.SelectedItem == "2")
{
MessageBoxEx.Show("Ok2");
}
if (comboBox2.SelectedItem == "3")
{
MessageBoxEx.Show("Ok3");
}
if (comboBox2.SelectedItem == "4")
{
MessageBoxEx.Show("Ok4");
}
我收到警告“可能是非预期的参考比较;要获得值比较,请将左侧投射到'string'类型”,并且单击该值时不会弹出消息框。需要做些什么来解决这个问题?
答案 0 :(得分:3)
只需将ToString()添加到SelectedItem属性
即可if (comboBox2.SelectedItem.ToString() == "1")
SelectedItem属性被输入为Object,因此您无法与没有明确转换为字符串的字符串进行比较。
但我应该问,你如何填写Items系列?是字符串类型的项目? 另外,不要假设只有在选择了项目时才会引发SelectedIndexChanged 在尝试访问SelectedItem属性之前添加一个检查,如下所示
if(combobox2.SelectedItem != null)
{
// Start your checks on the selectedItem
if (comboBox2.SelectedItem.ToString() == "1")
{
MessageBoxEx.Show("Ok1");
}
..... and so on....
}
答案 1 :(得分:3)
所以让我们稍微改写一下,因为问题是SelectedItem
是object
而你正在比较string
。这样的事情怎么样:
var val = Convert.ToString(comboBox2.SelectedItem);
switch (val)
{
case "1":
break;
case "2":
break;
default:
break;
}
如果default
为SelectedItem
,您还可以使用null
处理空字符串的情况。您不希望假设 SelectedItem
中始终存在值。此外,如果SelectedItem
为null
,我提供的方法不会抛出异常。但是,此语句comboBox2.SelectedItem.ToString()
将抛出NullReferenceException
}。
好的,所以根据你的评论偏离代码示例,你有两种处理OR条件的方法。第一个是利用switch
这样的下降:
switch (val)
{
case "1":
case "2":
break;
default:
break;
}
在该示例中,1
和2
都属于同一代码行。但是,如果您需要更强大的分支,则必须使用if
语句 - 但现在您不会收到任何警告,您也不必担心NullReferenceException
。< / p>
答案 2 :(得分:2)
您可能想要使用if (comboBox2.SelectedText == "3")
。
答案 3 :(得分:1)
使用comboBox2.SelectedItem.ToString()
答案 4 :(得分:0)
SelectedItem
是一个对象。但是,此对象包含String
属性。
http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selecteditem.aspx
答案 5 :(得分:0)
您正在尝试将对象与字符串(“3”)进行比较。编译器警告您,因为.toString()可能不会返回您期望的内容。它警告你,所以你可以采取适当的行动,以确保有一个良好的比较。
在这种情况下,几乎所有人都说过,juste只需使用 SelectedItem.ToString()
答案 6 :(得分:0)
您可以使用MessageBox.Show(comboBox2.SelectedItem.ToString());
,因为SelectedItem
是对象类型数据类型。因此,您必须将其转换为string