我在列表框对其元素的排序方式和 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;
}