我是为窗口形式编写 C# 程序的新手。当我使用 { Detail_ListBox.Sorted = true; 以升序对我的 ListBox 进行排序,但我得到的不是我想要的
-1
-2
-3
0
1
2
3
它能够对正值进行排序,但我想将负值和正值排序为
-3
-2
-1
0
1
2
3
这只是一个示例,实际值可以包括从 -300 到 +300。任何人都可以帮助我我应该使用哪些语句来对 -ve 和 +ve 值进行排序?
当您使用 { Detail_ListBox.Sorted = true; } 它像字符串一样对值进行排序。您应该首先对 int 值进行排序,然后将它们放入 ListBox 而不使用 Detail_ListBox.Sorted = true;
如果你有一个整数列表,像这样:
List<int> integers = somelist;
您可以使用以下命令对其进行排序:
integers.Sort();
然后分配给列表框:
Detail_ListBox.DataSource = integers;
或者:
Detail_ListBox.Items = integers.Select(x => x.ToString()).ToArray();
如果你ListBox
有一些DataSource
,你可以尝试排序DataSource
。如果没有,您可以尝试此扩展方法:
public static class ListBoxExtension
{
public static void SortBy<TElement>(this ListBox list,
Func<TElement, object> fieldSelector)
{
var items = list.Items.OfType<TElement>()
.OrderBy(fieldSelector)
.Cast<object>().ToArray();
list.BeginUpdate();
list.Items.Clear();
list.Items.AddRange(items);
list.EndUpdate();
}
public static void SortByDescending(this ListBox list,
Func<TElement, object> fieldSelector)
{
var items = list.Items.OfType<TElement>()
.OrderByDescending(fieldSelector)
.Cast<object>().ToArray();
list.BeginUpdate();
list.Items.Clear();
list.Items.AddRange(items);
list.EndUpdate();
}
}
//Usage
listBox1.SortBy<object>(x=>x);
//if your listBox1 has elements of the same type Item, use it like this:
listBox1.SortBy<Item>(x=>x.SomeProperty);