2

我在列表框对其元素的排序方式和 CompareTo 函数方面存在差异。

问题是,我正在使用两个列表框,并试图使两个元素列表仅出现在其中一个中。两个列表框都使用 sorted 属性进行排序。

我的程序通过列表框运行,并使用 CompareTo 函数一一比较元素:

if (listBox1.Items[x].ToString().CompareTo(listBox2.Items[y].ToString())) > 0 etc.

现在,一切正常,除了包含撇号 (') 的项目 - 就像在“Donald's Pizza”中一样:

在排序的列表框中,“Donald's Pizza”排在“Donald Duck”之前。撇号小于空格。但是使用 CompareTo 函数, "Donald's Pizza" 大于 "Donald Duck" 。“CompareTo”说,撇号大于空格!

这弄乱了我的系统。

如果我知道这只是导致问题的撇号,我可以轻松解决问题,但现在如果它也适用于其他字符,我不安全。

作为一种解决方案,我必须对列表框进行自己的排序过程,但我只是忽略了一些明显的东西吗?

编辑:感谢您的回答。

我最终根据 CompareTo 函数制作了自己的排序程序。这样我可以确定列表框的类型 100% 等于我稍后使用的 CompareTo 函数。

    public ListBox fn_sort_listbox(ListBox par_listbox)
    {
        ListBox lb_work = new ListBox();
        int in_index;
        int in_compare;

        if (par_listbox.Items.Count == 0) return lb_work;

        foreach (object i in par_listbox.Items)
        {
            in_index = 0;
            while (in_index < lb_work.Items.Count)
            {
                in_compare = lb_work.Items[in_index].ToString().CompareTo(i.ToString());
                if (in_compare > 0)
                {
                    break;
                }
                in_index++;
            }
            lb_work.Items.Insert(in_index, i.ToString());
        }

        return lb_work;
    }
4

1 回答 1

1
于 2012-07-03T04:53:32.083 回答