Можно ли заставить IEnumerable‹char› реализовать IComparable?

Как названо.

Мы все знаем, что если мы хотим, чтобы класс был сопоставим и использовался при сортировке, например DataGrid, мы реализуем IComparable.

Но для IEnumerable, как я могу это сделать?

У меня есть коллекция IEnumerable, мы хотим сравнить каждый IEnumerable друг с другом и выполнить сортировку.

Итак, скажем, коллекция List<IEnumerable<char>>, содержащая:

IEnumerable<char> EnumableA содержит: "d", "e", "f"

IEnumerable<char> EnumableB содержит: "д", "е", "в"

Если мы привяжем коллекцию List<IEnumerable<char>> к DataGrid, когда мы отсортируем их в порядке acs, порядок будет EnumableB 1-й, затем EnumableA 2-й.

Я думаю о решении, таком как сохранение EnumableA в объекте, который реализует IComparable, но тогда это потребует создания другой коллекции объектов, что будет дорого.

Итак, возможно ли или в любом случае ПРИСОЕДИНИТЬ интерфейс IComparable и мою реализацию сортировки к IEnuerable<char>, чтобы его можно было сортировать?


person King Chan    schedule 19.04.2012    source источник


Ответы (3)


Ознакомьтесь с этим сообщением: Использование собственного IComparer‹T› с Linq OrderBy

Используйте linq.orderby, передав свой IComparable.

person FiveTools    schedule 19.04.2012
comment
Я действительно не понимаю, как я могу применить это к привязке данных с помощью DataGrid для сортировки... Я не сортирую ее с помощью Linq программно... - person King Chan; 19.04.2012
comment
Ой, подождите, я пропустил ваше последнее предложение. Я думаю, вы правы. Спасибо. - person King Chan; 19.04.2012

Многие места, где можно использовать IComparable, также принимают IComparer. Может быть проще написать IComparer<IEnumerable<char>.

person Kendall Frey    schedule 19.04.2012

Чтобы сделать то, что вы хотите, нужно написать новый класс, который реализует как IEnumerable<char>, так и IComparable.

Я бы, вероятно, реализовал IList<char> и имел обычный List<char> в качестве резервного списка, реализуя все IList с теми же вызовами в резервном списке и реализуя IComparable так, как вам нужно.

Конечно, можно было пойти другим путем и использовать класс string. Он реализует как IComparable, так и IEnumerable<char>, так что это может подойти для того, что вы хотите.

person David Yaw    schedule 19.04.2012
comment
string реализует IEnumerable<char>, а не IEnumerable<string> - person Andrew Whitaker; 19.04.2012