在组合框中可能出现意外的引用比较
本文关键字:意外 引用 比较 组合 | 更新日期: 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);
}