Основной вопрос сортировки - C # - (Java Programmer Learning C #) - PullRequest
0 голосов
/ 26 июня 2009

Я работаю над сортировкой списка объектов, и, к сожалению, я не совсем получаю информацию отладки, чтобы увидеть, где я иду не так.

У меня есть собственный класс, в котором я реализовал метод CompareTo, и я вызываю .Sort () для Списка элементов этого класса. К сожалению, моя программа на самом деле не доходит до метода compareTo () ... она выдает ошибки и немедленно завершает работу при вызове .Sort ().

Что вообще мне следует остерегаться?

Вот мое определение класса, список интерфейсов для класса.

    /// <summary>
/// Summary description for ClientWorkspace.
/// </summary>
public class ClientWorkspace : IStorable
{ }

Я не перечислил метод CompareTo, так как он даже не доходит до этого кода.

Ответы [ 8 ]

5 голосов
/ 26 июня 2009

Я полагаю, что сообщение об исключении будет выглядеть примерно так: «Не удалось сравнить два элемента в массиве» с ошибкой «По крайней мере, один объект должен реализовывать интерфейс IComparable». Это дает вам то, что вам нужно знать:

Вы не объявили свой класс для реализации интерфейса IComparable.

Недостаточно просто реализовать метод CompareTo, поскольку алгоритмы сортировки будут искать интерфейс IComparable, прежде чем пытаться вызвать CompareTo через этот интерфейс.

... и именно поэтому ваш метод не вызывается.

4 голосов
/ 26 июня 2009

Попробуйте заставить ваш класс реализовать интерфейс IComparable.

Если пользовательский класс или структура не реализуем IComparable, его члены нельзя заказать и сортировать операция может бросить InvalidOperationException.

Источник: MSDN

1 голос
/ 26 июня 2009

Ваш класс должен реализовать IComparable или IComparable<>, чтобы функции сортировки знали о вашем CompareTo() методе.

0 голосов
/ 26 июня 2009

Вашему классу необходимо реализовать интерфейс IComparable<T>. См. Документацию по MSDN

0 голосов
/ 26 июня 2009

Вы можете реализовать интерфейс IComparable и предоставить реализацию метода CompareTo там. Это должно сделать это.

Есть пример на MSDN .

0 голосов
/ 26 июня 2009

Вы реализовали IComparable или IComparable ?

В качестве альтернативы, если вы не хотите, чтобы ваш класс реализовывал это, вы можете также реализовать IComparer в другом классе или создать метод, соответствующий делегату Comparer .

.NET не имеет неявного метода .compareTo.

0 голосов
/ 26 июня 2009

Поскольку вы программист на Java, вы, вероятно, ожидаете, что компилятор предупредит вас о возможных исключениях, которые могут быть вызваны определенным методом. Имейте в виду, что C # НЕ требует от вас перехвата каких-либо исключений. Сделайте это:

try {
  whatever
} catch (Exception e) {
   // put a breakpoint here and examine e.
}
0 голосов
/ 26 июня 2009

IStorable? Что это такое? Он не называется Sortable в .NET.

public class ClientWorkspace : IComparable<ClientWorkspace>
{ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...