2

在我使用时的 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");
        }

我收到警告“可能是意外的引用比较;要进行值比较,请将左侧强制转换为“字符串””,并且单击该值时不会弹出消息框。需要做什么来解决这个问题?

4

7 回答 7

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....
}
于 2013-05-03T13:04:27.810 回答
3

所以让我们稍微重写一下,因为问题SelectedItem是 anobject而你正在比较 a string。像这样的东西怎么样:

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

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

如果 is ,这也将允许您处理default返回空字符串的SelectedItem情况null。您不想假设. SelectedItem此外,如果SelectedItemnull,我提供的方法不会引发异常。但是,此语句comboBox2.SelectedItem.ToString()将抛出一个NullReferenceException.


好的,因此根据您与代码示例不同的评论,您有两种处理 OR 条件的方法。第一个是利用这样的跌幅switch

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

在该示例中,两者都12落入同一代码行。但是,如果您需要更健壮的分支,则必须使用if语句——但现在您不会收到任何警告,也不必担心NullReferenceException任何一个。

于 2013-05-03T13:04:56.590 回答
2

您可能想要使用if (comboBox2.SelectedText == "3").

于 2013-05-03T13:05:36.173 回答
1

使用 comboBox2.SelectedItem.ToString()

于 2013-05-03T13:04:16.403 回答
0

SelectedItem是一个对象。String这个对象虽然 包含一个属性。http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selecteditem.aspx

于 2013-05-03T13:04:26.000 回答
0

您正在尝试将对象与字符串(“3”)进行比较。编译器会警告您,因为 .toString() 可能不会返回您所期望的。它会警告您,以便您可以采取适当的措施来确保进行良好的比较。

在这种情况下,正如几乎所有人所说,只需简单地使用SelectedItem.ToString()

于 2013-05-03T13:11:54.087 回答
0

您可以使用MessageBox.Show(comboBox2.SelectedItem.ToString());因为SelectedItem是对象类型数据类型。所以你必须把它转换成string

于 2013-05-03T13:13:45.890 回答