我有以下代码,在每个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);
}
这似乎并不重复,因为我无法在其他问题中找到解决我的具体问题的方法。
答案 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);
}