c#组合框.设置SelectedItem错误

本文关键字:SelectedItem 错误 设置 组合 | 更新日期: 2023-09-27 18:12:12

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

c#组合框.设置SelectedItem错误

为SelectedItem属性添加ToString()

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....
}

我们重写一下因为问题是SelectedItemobject而你比较的是string。不如这样写:

var val = Convert.ToString(comboBox2.SelectedItem);
switch (val)
{
    case "1":
        break;
    case "2":
        break;
    default:
        break;
}

这也将允许您处理default的情况下,你得到一个空字符串,如果SelectedItemnull。您不希望假设SelectedItem中总是有一个值。此外,如果SelectedItemnull,则,我提供的方法不会抛出异常。但是,这个语句comboBox2.SelectedItem.ToString()将抛出一个NullReferenceException


好,根据您的注释,它偏离了代码示例,您有两种处理OR条件的方法。第一个是像这样利用switch的下跌:

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

在这个例子中,12都属于同一代码行。然而,如果你需要更健壮的分支,你将不得不使用if语句——但是现在你将不会得到任何警告,你也不必担心NullReferenceException

您可以使用if (comboBox2.SelectedText == "3")

使用combobox2 . selecteitem . tostring ()

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

您正在尝试将对象与字符串("3")进行比较。编译器会警告您,因为. tostring()可能不会返回您所期望的结果。它警告你,这样你就可以采取适当的行动,以确保有一个好的比较。

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

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