我有一个foreach
循环,其中用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();
答案 0 :(得分:2)
我要删除您在评论中提供的有关名称中包含数字的信息,所以我可能会不在这里。
根据您拥有的数量,您肯定会遇到问题。按Name
排序是直接的字符串比较,也就是说,它不会以相同的方式考虑数值。
例如,假设您的集合由CheckBox_7
和CheckBox_10
组成。如果要按数字顺序排列,则希望7排在10之前。字符串不是这种情况。在每个名称的索引9处,我们有一个7和一个1。7显然更大,这意味着"CheckBox_7"
总体上将排在"CheckBox_10"
之后。
如果要考虑数值,则需要解析名称,并在自定义排序方法中添加一些额外的知识。
这是一个类似问题。对于您的特定情况,这可能是一个很好的起点:sort string-numbers
答案 1 :(得分:0)
您尝试过这样的事情吗?
var items = CheckBoxList1.Items
.Cast<ListItem>()
.OrderBy(i=>i.Text)
.ToArray();
CheckBoxList1.Items.Clear();
CheckBoxList1.Items.AddRange(items);