C#comboBox.SelectedItem错误

时间:2013-05-03 13:02:21

标签: c#

当我使用

时,在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'类型”,并且单击该值时不会弹出消息框。需要做些什么来解决这个问题?

7 个答案:

答案 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)

所以让我们稍微改写一下,因为问题是SelectedItemobject而你正在比较string。这样的事情怎么样:

var val = Convert.ToString(comboBox2.SelectedItem);

switch (val)
{
    case "1":
        break;
    case "2":
        break;
    default:
        break;
}

如果defaultSelectedItem,您还可以使用null处理空字符串的情况。您不希望假设 SelectedItem中始终存在值。此外,如果SelectedItemnull,我提供的方法不会抛出异常。但是,此语句comboBox2.SelectedItem.ToString()将抛出NullReferenceException }。


好的,所以根据你的评论偏离代码示例,你有两种处理OR条件的方法。第一个是利用switch这样的下降:

switch (val)
{
    case "1":
    case "2":
        break;
    default:
        break;
}

在该示例中,12都属于同一代码行。但是,如果您需要更强大的分支,则必须使用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