在组合框中可能出现意外的引用比较

本文关键字:意外 引用 比较 组合 | 更新日期: 2023-09-27 18:07:13

我有以下代码,在每个if或else if

中给出警告

可能非预期的引用比较;要获得值比较,请将左侧强制转换为键入'string'

int delka = Convert.ToInt32(delka_numericUpDown1.Value);
if (delka_comboBox1.SelectedItem == "metr" &&
    delka_comboBox2.SelectedItem == "kilometr")
{
    delka_vysledek_label.Text = Convert.ToString(delka / 1000);
}

这似乎不是重复的,因为我在其他问题中找不到我的具体问题的解决方案。

在组合框中可能出现意外的引用比较

SelectedItem - For gets将返回在组合框中显示的数据源中的实际对象。对于set,如果值存在于数据源中,它将被选中,否则操作将无异常地完成,但实际上不会做任何事情。

尝试用ToString()方法解析SelectedItem返回到string的对象,然后再与其他字符串(" meter " &"公里")状态:

if (delka_comboBox1.SelectedItem.ToString() == "metr" && delka_comboBox2.SelectedItem.ToString() == "kilometr")
{
    delka_vysledek_label.Text = Convert.ToString(delka / 1000);
}

就像@Patrick在评论中提到的:SelectedItem可以是空的,所以如果你想覆盖这种情况,你可以使用另一个强制转换方法(string),例如:

if ((string)delka_comboBox1.SelectedItem == "metr" && (string)delka_comboBox2.SelectedItem == "kilometr")
{
    delka_vysledek_label.Text = Convert.ToString(delka / 1000);
}

SelectedItem返回一个Object,但是您将它与一个字符串(MSDN)进行比较。要摆脱这个警告,你只需要调用ToString方法。

代替

delka = Convert.ToInt32(delka_numericUpDown1.Value);
    if (delka_comboBox1.SelectedItem == "metr" && delka_comboBox2.SelectedItem == "kilometr")
    {
        delka_vysledek_label.Text = Convert.ToString(delka / 1000);
    }

你想做

delka = Convert.ToInt32(delka_numericUpDown1.Value);
    if (delka_comboBox1.SelectedItem.ToString() == "metr" && delka_comboBox2.SelectedItem.ToString() == "kilometr")
    {
        delka_vysledek_label.Text = Convert.ToString(delka / 1000);
    }