2016-10-13 4 views
-1

У меня есть ArrayList:Сортировка различных типов в C# Список

ArrayList myList = new ArrayList(); 

Он содержит, по крайней мере, два экземпляра класса. Я хочу отсортировать его по одному полю, которое содержится в обоих из них. Пожалуйста, помогите мне написать метод IComparer для Array.Sort() или дать мне совет, чтобы создать другую структуру для этой задачи (список с двумя экземплярами класса).

Заранее благодарен!

+1

Я бы рекомендовал вам добавить родительский интерфейс для этих двух, если они вам понадобятся. Затем, используя 'List ' вместо 'ArrayList', вы можете просто использовать linq' .OrderBy' –

ответ

0

Что-то вроде этого:

public sealed class MyComparer: System.Collections.IComparer { 
    // We want just one Comparer instance 
    public static MyComparer Comparer { 
     get; 
    } = new MyComparer(); 

    private MyComparer() { 
    } 

    public int Compare(object x, object y) { 
     if (Object.ReferenceEquals(x, y)) 
     return 0; 
     else if (Object.ReferenceEquals(x, null)) 
     return -1; 
     else if (Object.ReferenceEquals(y, null)) 
     return 1; 

     // Providing that the fields of interest are of type int 
     int leftField = (x is FirstType) 
     ? ((FirstType) x).FieldOfInterest1 
     : ((SecondType) x).FieldOfInterest2; 

     int rightField = (y is FirstType) 
     ? ((FirstType) y).FieldOfInterest1 
     : ((SecondType) y).FieldOfInterest2; 

     return leftField.CompareTo(rightField); 
    } 
    } 

    ... 

    ArrayList myList = new ArrayList(); 

    ... 

    myList.Sort(MyComparer.Comparer); 

Но помните, ArrayListявляется устаревшим класса, попробуйте изменить дизайн по крайней мере, в List<Object> или (лучший выбор) List<SomeBaseClassOrInterface>.

+0

myList.Sort (MyComparer.Comparer.Compare); – SergeyA

+0

Большое вам спасибо! – SergeyA

Смежные вопросы