我遇到了列表框排序其元素和CompareTo函數的方式不同的問題。與listbox.sort和字符串compareto函數的小問題
事情是,我使用兩個列表框,並試圖使兩個元素列表只出現在其中一個列表框中。兩個列表框都使用已排序的屬性進行排序。
我的程序通過列表框運行,並通過一個比較使用的CompareTo功能的要素之一:
if (listBox1.Items[x].ToString().CompareTo(listBox2.Items[y].ToString())) > 0 etc.
現在,一切工作正常,除了包含一個單引號(')項目 - 像「唐納德比薩」:
在有序列表框中,「唐納德比薩」出現在「唐老鴨」之前。撇號小於空格。 但是使用CompareTo函數,「唐納德比薩」比「唐老鴨」更大。 「CompareTo」說,撇號是比空間大!
這混亂了我的系統。
如果我知道這只是導致問題的撇號,我可以很容易地做出解決方法,但現在我不太安全,如果它也可以應用於其他角色。
作爲一個解決方案,我必須對列表框做出自己的排序過程,但是我只是忽略了一些明顯的東西?編輯: 感謝您的答案。
我最終根據CompareTo函數創建了我自己的排序過程。 這樣我確定列表框的排序與我以後使用的CompareTo函數100%相等。
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;
}
看到http://social.msdn.microsoft.com/Forums/en-IN/csharpgeneral/thread/6d973127-e861- 4852-b6e8-235607229e45 –