组合框中可能的非预期参考比较

时间:2015-08-09 16:24:03

标签: c#

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

中都会发出警告
  

可能的   意外的参考比较;要获得值比较,请将左侧投射到键入'字符串'

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

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

2 个答案:

答案 0 :(得分:1)

  

SelectedItem - 对于获取,这将返回ComboBox中显示的DataSource中的实际对象。对于集合,如果值存在于DataSource中,它将被选中,否则操作将完成而没有例外但实际上不会做任何事情。

尝试使用SelectedItem方法将string返回的对象解析为ToString(),然后将其与其他字符串(“metr”&“kilometr”)进行比较,条件为:

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

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

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

答案 1 :(得分:0)

SelectedItem返回一个Object,但您将其与字符串(MSDN)进行比较。要消除此警告,您只需调用ToString方法。

而不是

Exception Attributes: array (
    'driver' => 'Cake\\Database\\Driver\\Sqlserver', 
)

你想做

delka = Convert.ToInt32(delka_numericUpDown1.Value);

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