如何排序的清单控制的类型

0

的问题

我创建了名单的管制形成这样的:

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

所有控制,在这个名单是标签,所以我需要这个名单的 控制 中上升了,所以我使用 的排序 方法的列表类似这样的:

list.Sort();

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

因为我想要排序,它使用 TabIndex 值或至少其 名称,目前还不清楚我。 我应该怎么过来 的排序 方法或什么我应该使用,而不是这种方法?

c# controls list sorting
2021-10-27 17:14:53
2

最好的答案

2

你可以使用的 类型界面方法的排序依据 ,并提供功能指定什么样的元素,你是比较作为替代使用排序。

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;}
}
2021-10-27 17:27:05
1

你可以通过一个 Comparison 功能 list.Sort

var list = this.Controls.OfType<Label>().ToList();
list.Sort((a, b) => a.TabIndex.CompareTo(b.TabIndex));
2021-10-27 17:22:01

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................