我创建了两个组合框,一个用于最小值,另一个用于最大值。我的代码应该确保用户没有选择大于最大值的最小值,或者使用此代码选择小于最小值的最大值。
private void MaxRating_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
switch (MaxRating.SelectedIndex)
{
case 0:
if (MinRating.SelectedIndex > 0)
MinRating.SelectedIndex = 0;
break;
case 1:
if (MinRating.SelectedIndex > 1)
MinRating.SelectedIndex = 1;
break;
case 2:
if (MinRating.SelectedIndex > 2)
MinRating.SelectedIndex = 2;
break;
case 3:
if (MinRating.SelectedIndex > 3)
MinRating.SelectedIndex = 3;
break;
case 4:
if (MinRating.SelectedIndex > 4)
MinRating.SelectedIndex = 4;
break;
}
}
然而,在调用“if(MinRating.SelectedIndex> 0)”的行进行调试时,我得到“NullReferenceException未被用户代码处理”。
我不知道为什么,我也有MinRating_SelectionChanged的功能,而且我似乎没有得到那样的东西。
如果我从此函数中删除case:0,则似乎没有错误。不是来自其他功能。我也试过替换>与==但它似乎只是做同样的事情。 任何帮助都会被赞赏,因为我只是感到困惑。
编辑:如果我只是放置这两行
int minrating = MinRating.SelectedIndex;
int maxrating = MaxRating.SelectedIndex;
它在第二行给出错误
答案 0 :(得分:1)
你能不能这么说?
if (MinRating.SelectedIndex > MaxRating.SelectedIndex)
{
MinRating.SelectedIndex = MaxRating.SelectedIndex;
}
然后,您不会尝试读取尚未设置的值。它也短得多。
在侧节点上:您不应使用SelectedIndex属性。使用对象的值而不是它们在集合中的位置。
答案 1 :(得分:1)
如果仔细分析,您会看到即使在控件初始化期间也可能会调用此方法,其中MaxRating
刚刚构建但MinRating
甚至没有构造。在调用此方法时,您不能假设它们都是构造的。
作为解决方法,您可以在此方法的开头检查两者的null。
答案 2 :(得分:-1)
我不熟悉C#,但是当MaxRating.SelectedIndex为null(0等于null)时,可能会执行case 0,因此它使用null MaxRating.SelectedIndex进入大小写。