C#comboBox.SelectedItem错误

C#comboBox.SelectedItem错误,c#,C#,在组合框中,当我使用 if (comboBox2.SelectedItem == "1") { MessageBoxEx.Show("Ok1"); } if (comboBox2.SelectedItem == "2") { MessageBoxEx.Show("Ok2"); } if (comboBox2.SelectedItem ==

在组合框中,当我使用

        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’”,单击该值时,消息框不会弹出。需要做什么来修复此问题?

使用comboBox2.SelectedItem.ToString()是一个对象。但此对象包含一个
字符串
属性。

只需在属性中添加一个ToString()

SelectedItem属性被类型化为对象,因此,如果不将其显式转换为字符串,则无法与字符串进行比较

但我应该问,你是如何填写这些物品的?项目是否为字符串类型? 也不要假设SelectedIndexChanged仅在选择了某个项目时才会引发。
在尝试像这样访问SelectedItem属性之前添加一个检查

if(combobox2.SelectedItem != null)
{
    // Start your checks on the selectedItem
    if (comboBox2.SelectedItem.ToString() == "1")
    {
        MessageBoxEx.Show("Ok1");
    }
    ..... and so on....
}

让我们重写一下,因为问题是
SelectedItem
是一个
对象
,而您正在比较一个
字符串
。像这样的怎么样:

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

switch (val)
{
    case "1":
        break;
    case "2":
        break;
    default:
        break;
}
switch (val)
{
    case "1":
    case "2":
        break;
    default:
        break;
}
这还允许您处理
默认值
的情况,如果
SelectedItem
,则返回空字符串。您不想假设在
SelectedItem
中总是有一个值。此外,如果
SelectedItem
null
,则我提供的方法不会引发异常。
但是,此语句
comboBox2.SelectedItem.ToString()
将引发
NullReferenceException


好的,根据您的注释,这与代码示例不同,您有两种处理或条件的方法。第一个是利用
开关的下降功能,如下所示:

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

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

在该示例中,
1
2
将落在同一代码行中。但是,如果您需要更强大的分支,您必须使用
if
语句,但现在您将不会收到任何警告,也不必担心出现
NullReferenceException

如果您试图将对象与字符串(“3”)进行比较,您可能需要使用
)。编译器会警告您,因为.toString()可能不会返回您期望的结果。它会警告您,以便您可以采取适当的行动,确保有一个良好的比较


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

您就可以使用
MessageBox.Show(comboBox2.SelectedItem.ToString())因为
SelectedItem
是对象类型数据类型。因此,您必须将其转换为
string

comboBox2.SelectedItem.Value.toString()
好的,现在如果我想将组合框中的项目改为例如:if(comboBox2.SelectedItem==“1”)|(Combox2.SelectedItem==“2”)那么它是如何编写的呢?现在函数去哪里了?我在上面的主要帖子中也做了一些改动,因为我最终在措辞上把自己弄糊涂了,然后收到了我得到的答案。@JohnMcmillan,你是什么意思
函数去了哪里
?我提供的代码取代了您提供的示例-字面意思。@JohnMcmillan,作为对此
的响应,单击该值时不会弹出消息框
-您如何填充组合框?它是用字符串填充的还是绑定到一个类的数据?@JohnMcmillan,那么使用我提供的代码进行比较应该不会有问题-当你说
函数去哪里
,这个问题的答案是什么?使用这个方法我会得到一个异常,如果我使用try,catch块函数甚至不会对catch执行do;有没有办法解决这个问题?这是一个NullReferenceException,我填充items集合的方式是这样的:您不应该假设SelectedIndexChanged事件仅在您选择了一个项时才会引发。如果未选择任何项目,则SelectedIndex属性为-1对不起,什么??我没有跟着你;我假设什么..?如果您得到NullReferenceException,则意味着当组合框中没有选择元素时,将调用SelectedIndexChanged事件。在这种情况下访问SelectedItem会导致异常。在尝试访问SelectedItem属性的值之前,我在该属性上添加了一个测试