Получение ошибки компиляции при попытке отсортировать массив в C # - PullRequest
2 голосов
/ 09 декабря 2011

Я делал домашнюю работу в C #, которая требовала сортировки массива.Я мог бы отсортировать массив целых чисел, используя

Array.sort<int>(a, delegate(int x, int y) { return y-x;});

Однако, если я хочу сделать это с определенной позиции и определенной длины

Array.sort<int>(a, 0, m, delegate(int x, int y) { return y-x;});

Я получаю ошибку компиляции: «Не удается преобразовать анонимный методвведите 'System.Collections.Generic.IComparer', потому что это не тип делегата ".Я решил проблему, просто используя

Array.sort<int>(a, 0, m);

и делая все остальное в обратном направлении.Почему это дает мне ошибку, и как можно изменить ее на работу?

Спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 09 декабря 2011

Метод, вызываемый в первом примере, имеет подпись:

Array.Sort(int[] array, Comparison<int> comparison) 

Используемый вами делегат предназначен для сравнения. Не существует перегрузки Array.Sort с индексом, длина и Сравнение.

Метод, который вы пытаетесь вызвать, имеет следующую подпись:

Array.Sort(int[] array, int index, int length, IComparer<int> comparer) 

Примечание IComparer, а не сравнение

Если вам нужна пользовательская сортировка. Вам нужно будет создать класс, который реализует IComparer , поскольку именно этого ожидает 4-й параметр.

Либо попробуйте метод расширения .OrderByDescending, который доступен, если вы включите using System.Linq;

0 голосов
/ 09 декабря 2011

Если вам не нужен пользовательский компаратор, передайте ноль в качестве 4-го аргумента.

Если вам нужен, вам нужен параметр, который наследуется от IComparer - вы не можете просто использовать анонимный делегат.

http://msdn.microsoft.com/en-us/library/system.collections.icomparer.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...