如何对控件类型列表进行排序
How to sort list of Control type
我在这样的表单上创建了控件列表:
List<Control> list = new List<Control>();
foreach (Control c in this.Controls)
{
if (c.GetType() == typeof(Label))
{
list.Add(c);
}
}
此列表中的所有控件都是标签,因此我需要像这样对列表 class 的 Controls in ascending order, so I use Sort 方法列表进行排序:
list.Sort();
但它对我说 System.InvalidOperationException: 'Failed to compare two elements in the array.' ArgumentException: At least one object must implement IComparable.
因为我想使用 TabIndex value or at least its Name, it's unclear for me. What should I pass to Sort 方法对其进行排序,或者我应该使用什么来代替此方法?
您可以使用 IEnumerable interface method of OrderBy 并为其提供指定要比较的元素的函数,作为使用排序的替代方法。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var controls = new List<B>() {new B() {Index = 0}, new B() {Index = -1}};
var sortedControls = controls.OrderBy(x => x.Index).ToList();
Console.WriteLine(controls[0].Index); // -1
Console.WriteLine(controls[1].Index); // 0
}
}
public class B
{
public int Index {get; set;}
}
您可以将 Comparison
函数传递给 list.Sort
var list = this.Controls.OfType<Label>().ToList();
list.Sort((a, b) => a.TabIndex.CompareTo(b.TabIndex));
我在这样的表单上创建了控件列表:
List<Control> list = new List<Control>();
foreach (Control c in this.Controls)
{
if (c.GetType() == typeof(Label))
{
list.Add(c);
}
}
此列表中的所有控件都是标签,因此我需要像这样对列表 class 的 Controls in ascending order, so I use Sort 方法列表进行排序:
list.Sort();
但它对我说 System.InvalidOperationException: 'Failed to compare two elements in the array.' ArgumentException: At least one object must implement IComparable.
因为我想使用 TabIndex value or at least its Name, it's unclear for me. What should I pass to Sort 方法对其进行排序,或者我应该使用什么来代替此方法?
您可以使用 IEnumerable interface method of OrderBy 并为其提供指定要比较的元素的函数,作为使用排序的替代方法。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var controls = new List<B>() {new B() {Index = 0}, new B() {Index = -1}};
var sortedControls = controls.OrderBy(x => x.Index).ToList();
Console.WriteLine(controls[0].Index); // -1
Console.WriteLine(controls[1].Index); // 0
}
}
public class B
{
public int Index {get; set;}
}
您可以将 Comparison
函数传递给 list.Sort
var list = this.Controls.OfType<Label>().ToList();
list.Sort((a, b) => a.TabIndex.CompareTo(b.TabIndex));