IComparable
Я не знаю, что дает вам представление о том, что вам нужно использовать статический метод, но это не правильно.
Вы можете заставить все ваши IFoo
реализации реализовать IComparable<IFoo>
, добавив его в IFoo
:
interface IFoo : IComparable<IFoo>
{
int Value { get; set; } // for example's sake
}
class SomeFoo : IFoo
{
public int Value { get; set; }
public int CompareTo(IFoo other)
{
// implement your custom comparison here...
return Value.CompareTo(other.Value); // e.g.
}
}
Затем просто отсортируйте ваш List<IFoo>
так:
list.Sort();
Сортировка по произвольному столбцу
Вы изначально заявили, что хотите отсортировать по произвольному столбцу в таблице объектов IFoo. Это сложнее; вам нужно иметь возможность сортировать список объектов по любому из их открытых свойств, поэтому базовая реализация IComparable<IFoo>
, описанная выше, не собирается его сокращать.
Решением является создание PropertyComparer<T>
класса, который реализует IComparer<T>
и будет сортировать по любое свойство T
. Вы могли бы написать это специально для IFoo
, но в какой-то момент каждый разработчик сталкивается с этой проблемой и заканчивает тем, что написал общий компаратор свойств, который попытается отсортировать любой тип. В результате вы можете зайти в Google "C # Property Comparer" и вы обязательно получите несколько просмотров. Вот простой:
http://www.codeproject.com/Articles/16200/Simple-PropertyComparer