Come ordinare l'elenco di Controllo di tipo

0

Domanda

Ho creato la lista dei controlli in materia di forma simile a questa:

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

Tutti i controlli in questo elenco sono le Etichette, quindi ho bisogno di ordinare questo elenco di Controlli in ordine crescente, in modo da utilizzare Sorta di metodo di Elenco classe di simile a questo:

list.Sort();

Ma mi dice: System.InvalidOperationException: 'Failed to compare two elements in the array.' ArgumentException: At least one object must implement IComparable.

Dal momento che voglio ordinare utilizzando TabIndex valore o almeno il suo Nome, non è chiaro per me. Che cosa devo passare per Ordinare metodo o cosa dovrei usare al posto di questo metodo?

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

Migliore risposta

2

È possibile utilizzare l' interfaccia IEnumerable metodo di OrderBy e fornire una funzione che specifica l'elemento di confronto come un'alternativa all'utilizzo di sorta.

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

È possibile passare un Comparison funzione di list.Sort

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

In altre lingue

Questa pagina è in altre lingue

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