Я пытаюсь создать базовый класс Quicksort с помощью VB.NET, взяв для него массив элементов IComparable. Подпись выглядит так:
public shared sub Sort(ByVal values() as IComparable)
Однако, когда я передаю массив двойников, компилятор выдает мне ошибки.
Dim numbers(100) as double
Dim random as new Random(0)
for i as integer = 0 to numbers.length - 1
numbers(i) = random.NextDouble()
Next
QuickSort.Sort(numbers) ' gives compiler error.
Ошибка:
Error 88 Value of type '1-dimensional array of Double' cannot be converted to '1-dimensional array of System.IComparable' because 'Double' is not derived from 'System.IComparable'. C:\Proving Grounds\Module1.vb
В документации .NET говорится, что двойная реализация IComparable. Почему компилятор .NET не позволяет мне это сделать?





Хотя double может быть преобразован в IComparable, это не означает, что double[] может быть преобразован в IComparable[]. Простым вариантом было бы создать новый массив IComparable[] и скопировать данные - или, в вашем случае, просто запустить исходный массив как IComparable[].
На самом деле, у меня возникнет соблазн использовать общие интерфейсы IComparable<T> или IComparer<T> или делегат Comparison<T> - все с использованием универсальных типов - это также позволяет использовать Comparer<T>.Default и компараторы, отличные от стандартных.
Вы можете привести пример того, как написать метод сортировки с помощью дженериков?
@Alex нужно больше контекста - что это за ввод? Но одно из: IComparable-of-T, IComparer-of-T или Comparer-of-T.
О верно. Я действительно должен ИСПОЛЬЗОВАТЬ эти новые языковые функции.