C# 如何按复选框的名称对其进行排序?
我有一个C# 如何按复选框的名称对其进行排序?,c#,list,winforms,sorting,checkbox,C#,List,Winforms,Sorting,Checkbox,我有一个foreach循环,它用groupbox中的复选框填充列表。问题是它们是以随机顺序添加的。因为我按字母升序给它们命名,所以我想按它们的名称属性对它们进行排序 我已经尝试过使用.Sort(),但它没有任何作用。我还尝试使用Linq表达式digboxs=digboxs.OrderBy(x=>x.Name.ToList() 但它也没有任何作用 这是我的密码: GroupBox=(GroupBox)e.参数; 字符串DigInput=“”; List digboxs=新列表(); foreach
foreach
循环,它用groupbox
中的复选框填充列表。问题是它们是以随机顺序添加的。因为我按字母升序给它们命名,所以我想按它们的名称
属性对它们进行排序
我已经尝试过使用.Sort()
,但它没有任何作用。我还尝试使用Linq表达式digboxs=digboxs.OrderBy(x=>x.Name.ToList()代码>
但它也没有任何作用
这是我的密码:
GroupBox=(GroupBox)e.参数;
字符串DigInput=“”;
List digboxs=新列表();
foreach(框中的控件c.控件)
{
如果(c是复选框)
{
添加(c作为复选框);
}
}
digboxs=digboxs.OrderBy(x=>x.Name.ToList();
您是否尝试过类似的方法:
var items = CheckBoxList1.Items
.Cast<ListItem>()
.OrderBy(i=>i.Text)
.ToArray();
CheckBoxList1.Items.Clear();
CheckBoxList1.Items.AddRange(items);
var items=CheckBoxList1.items
.Cast()
.OrderBy(i=>i.Text)
.ToArray();
CheckBoxList1.Items.Clear();
复选框列表1.Items.AddRange(Items);
您是否尝试过类似的方法:
var items = CheckBoxList1.Items
.Cast<ListItem>()
.OrderBy(i=>i.Text)
.ToArray();
CheckBoxList1.Items.Clear();
CheckBoxList1.Items.AddRange(items);
var items=CheckBoxList1.items
.Cast()
.OrderBy(i=>i.Text)
.ToArray();
CheckBoxList1.Items.Clear();
复选框列表1.Items.AddRange(Items);
我要删除您在评论中提供的关于姓名中数字的一些信息,因此我可能会也可能不会在这里删除。
取决于你有多少,你肯定会看到一个问题。按Name
排序是一种直接的字符串比较,也就是说,它不以相同的方式考虑数值
例如,假设您的集合由CheckBox\u 7
和CheckBox\u 10
组成。如果你想让它们按数字顺序排列,你会期望7在10之前出现。字符串的情况并非如此。在每个名称的索引9处,我们有一个7和一个1。7明显更大,这意味着作为一个整体,“CheckBox\u 7”
将位于“CheckBox\u 10”
之后
如果要考虑数值,需要解析名称,并在自定义排序方法中添加一些额外的智能。
这里有一个类似的问题。这可能是您的具体案例的一个很好的起点:我将删除您在评论中提供的关于姓名中数字的一些信息,因此我可能会也可能不会在这里删除。
取决于你有多少,你肯定会看到一个问题。按Name
排序是一种直接的字符串比较,也就是说,它不以相同的方式考虑数值
例如,假设您的集合由CheckBox\u 7
和CheckBox\u 10
组成。如果你想让它们按数字顺序排列,你会期望7在10之前出现。字符串的情况并非如此。在每个名称的索引9处,我们有一个7和一个1。7明显更大,这意味着作为一个整体,“CheckBox\u 7”
将位于“CheckBox\u 10”
之后
如果要考虑数值,需要解析名称,并在自定义排序方法中添加一些额外的智能。
这里有一个类似的问题。这可能是您的具体案例的一个很好的起点:定义“什么都不做”。您将.OrderBy
放在哪里了?您能否在实现.OrderBy
时发布代码和输出示例?这似乎很奇怪,因为这不起作用。说“不做任何事”完全符合我的意思。在它执行那行代码之后,当我检查debugger@Ziema我不认为你是什么意思。当然,它在做一些事情,它在整理收藏。您只是没有以有意义的方式使用结果。定义“什么都不做”。您将.OrderBy
放在哪里了?您能否在实现.OrderBy
的同时发布代码和输出示例?这似乎很奇怪,因为这不起作用。说“不做任何事”完全符合我的意思。在它执行那行代码之后,当我检查debugger@Ziema我不认为你是什么意思。当然,它在做一些事情,它在整理收藏。您只是没有以有意义的方式使用结果。谢谢!我删除了Name
属性中的数值,并将其替换为字母,这解决了问题。谢谢!我删除了Name
属性中的数值,并用字母顺序的数值替换,这解决了问题。