如何排序控件类型的列表



我在表单上创建了一个控件列表:

List<Control> list = new List<Control>();
foreach (Control c in this.Controls)
{
if (c.GetType() == typeof(Label))
{
list.Add(c);
}
}

这个列表中的所有控件都是标签,所以我需要按升序对这个列表中的控件进行排序,所以我使用list类的sort方法,如下所示:

list.Sort();

但是它告诉我System.InvalidOperationException: 'Failed to compare two elements in the array.' ArgumentException: At least one object must implement IComparable.

因为我想使用TabIndex值或至少它的名称对它进行排序,所以我不清楚。我应该把什么传递给Sort方法或者我应该用什么代替这个方法?

您可以使用OrderBy的IEnumerable接口方法,并为其提供一个函数,该函数指定要比较的元素,作为使用sort的替代方法。

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));

相关内容

  • 没有找到相关文章

最新更新