0

我创建了两个组合框,一个用于最小值,一个用于最大值。我的代码应确保用户不会使用此代码选择大于最大值的最小值或小于最小值的最大值。

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;

它在第二行给出错误

4

3 回答 3

1

你不能就这么说吗?

if (MinRating.SelectedIndex > MaxRating.SelectedIndex)
{
    MinRating.SelectedIndex = MaxRating.SelectedIndex;
}

然后你不要尝试读取尚未设置的值。它也短了很多。

在侧节点上:您不应使用 SelectedIndex 属性。使用对象的值而不是它们在集合中的位置。

于 2012-08-08T02:18:29.353 回答
1

如果仔细分析,您会发现即使在控件初始化期间也可能调用此方法,其中MaxRating刚刚构造但MinRating尚未构造。你不能假设它们都是在调用此方法时构造的。

您可以在此方法开始时检查它们是否为 null 作为解决方法。

于 2012-08-08T02:58:51.880 回答
-1

我对 C# 的经验不是很丰富,但是当 MaxRating.SelectedIndex 为 null 时,可能会执行 case 0(0 相当于 null),因此它正在输入带有 null MaxRating.SelectedIndex 的 case。

于 2012-08-08T02:02:07.613 回答