首页 > 解决方案 > 如何按名称对复选框列表进行排序?

问题描述

我有一个循环,它用from aforeach填充列表。问题是它们是按随机顺序添加的。因为我按字母升序命名了它们,所以我想按它们的属性对它们进行排序。checkboxesgroupboxName

我已经尝试过使用.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();

标签: c#listwinformssortingcheckbox

解决方案


我将删除您在评论中提供的有关名称中数字的一些信息,所以我可能会或可能不会在这里关闭。
根据您拥有的数量,您肯定会看到问题。排序依据Name是直接的字符串比较,也就是说,它不会以相同的方式考虑数值。

例如,假设您的集合由CheckBox_7和组成CheckBox_10。如果你希望它们按数字顺序排列,你会期望 7 出现在 10 之前。字符串不是这种情况。在每个名称的索引 9 处,我们有一个 7 和一个 1。7 显然更大,这意味着作为一个整体,"CheckBox_7"将在 之后"CheckBox_10"

如果您想考虑数值,您需要解析名称并将一些额外的智能添加到自定义排序方法中。
这是一个类似的问题。对于您的具体情况,这可能是一个很好的起点:sort string-numbers


推荐阅读