我正在尝试检查我的组合框中的值,但它失败了,我的值永远不会匹配,我有这个警告:
可能的意外参考 比较;得到一个价值比较, 左手边输入 '字符串'
private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (((ComboBox)sender).SelectedValue == "Floyd-Warshall")
{
MessageBox.Show("foobar");
感谢。
答案 0 :(得分:2)
SelectedValue的类型是object
所以,即使它匹配相等操作将返回false的值,所以你必须将字符串与字符串进行比较,如下所示:
if (((ComboBox)sender).SelectedValue.ToString() == "Floyd-Warshall")
答案 1 :(得分:2)
有多种修复方法,一种是转换为字符串,另一种是在SelectedValue上调用ToString。
正如您所说,其他一些建议的答案不起作用,您确定Combobox中的项目实际上是一个字符串吗?
例如,这将适用于建议的修补程序:
<Window x:Class="ExerciseOne.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:extern="clr-namespace:System;assembly=mscorlib">
<Grid>
<ComboBox SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Items>
<extern:String>Hello</extern:String>
<extern:String>Floyd-Warshall</extern:String>
</ComboBox.Items>
</ComboBox>
</Grid>
</Window>
但是这不是:
<Window x:Class="ExerciseOne.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" xmlns:extern="clr-namespace:System;assembly=mscorlib">
<Grid>
<ComboBox SelectionChanged="ComboBox_SelectionChanged">
<ComboBox.Items>
<ComboBoxItem>Hello</ComboBoxItem>
<ComboBoxItem>Floyd-Warshall</ComboBoxItem>
</ComboBox.Items>
</ComboBox>
</Grid>
</Window>
您可以通过在现有事件处理程序中运行以下代码来快速确定是否是这种情况:
MessageBox.Show(((ComboBox)sender).SelectedValue.GetType().ToString());
答案 2 :(得分:0)
必须添加.toString()
的SelectedValue警告