c# - 如何按名称对复选框列表进行排序?
问题描述
我有一个循环,它用from aforeach
填充列表。问题是它们是按随机顺序添加的。因为我按字母升序命名了它们,所以我想按它们的属性对它们进行排序。checkboxes
groupbox
Name
我已经尝试过使用.Sort()
,但它没有做任何事情。我也尝试使用 Linq 表达式DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();
但它也没有做任何事情......
这是我的代码:
GroupBox box = (GroupBox)e.Argument;
string DigInput = "";
List<CheckBox> DigBoxes = new List<CheckBox>();
foreach (Control c in box.Controls)
{
if(c is CheckBox)
{
DigBoxes.Add(c as CheckBox);
}
}
DigBoxes = DigBoxes.OrderBy(x => x.Name).ToList();
解决方案
我将删除您在评论中提供的有关名称中数字的一些信息,所以我可能会或可能不会在这里关闭。
根据您拥有的数量,您肯定会看到问题。排序依据Name
是直接的字符串比较,也就是说,它不会以相同的方式考虑数值。
例如,假设您的集合由CheckBox_7
和组成CheckBox_10
。如果你希望它们按数字顺序排列,你会期望 7 出现在 10 之前。字符串不是这种情况。在每个名称的索引 9 处,我们有一个 7 和一个 1。7 显然更大,这意味着作为一个整体,"CheckBox_7"
将在 之后"CheckBox_10"
。
如果您想考虑数值,您需要解析名称并将一些额外的智能添加到自定义排序方法中。
这是一个类似的问题。对于您的具体情况,这可能是一个很好的起点:sort string-numbers