C#如何对Control类型的List集合按TabIndex或Name属性排序
问题原因
无参Sort方法要求集合中的元素必须实现IComparable接口才能自动比较大小,WinForm的Control类没有实现该接口,因此直接调用会抛出你遇到的错误。
解决方法
你可以通过两种常用方式实现按指定属性升序排序:
方法1:使用Sort方法的重载传入自定义比较逻辑
直接给Sort传入Lambda表达式定义两个控件的比较规则:
- 按
TabIndex升序排序:
list.Sort((a, b) => a.TabIndex.CompareTo(b.TabIndex));
- 按
Name属性升序排序:
list.Sort((a, b) => a.Name.CompareTo(b.Name));
方法2:使用LINQ的OrderBy方法实现(写法更简洁直观)
// 按TabIndex排序 var sortedList = list.OrderBy(c => c.TabIndex).ToList(); // 按Name排序 var sortedList = list.OrderBy(c => c.Name).ToList();
额外优化
你原来筛选Label控件的代码也可以用LINQ简化为一行:
List<Control> list = this.Controls.OfType<Label>().Cast<Control>().ToList();
内容的提问来源于stack exchange,提问作者WideWood
相关产品推荐
相关产品推荐

