Преобразование двойного массива в массив IComparable - PullRequest
1 голос
/ 16 октября 2008

Я пытаюсь создать базовый класс Quicksort, используя VB.NET, используя массив элементов IComparable. Подпись выглядит так:

public shared sub Sort(ByVal values() as IComparable)

Однако, когда я передаю массив значений типа double, компилятор выдает мне ошибки.

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 говорится, что double реализует IComparable. Почему компилятор .NET не позволяет мне делать это?

1 Ответ

4 голосов
/ 16 октября 2008

Хотя double можно привести к IComparable, это не значит, что double[] можно привести к IComparable[]. Простой вариант - создать новый массив IComparable[] и скопировать данные поверх - или, в вашем случае, просто запустить исходный массив как IComparable[].

На самом деле, я бы соблазнился использовать универсальные интерфейсы IComparable<T> или IComparer<T> или делегат Comparison<T> - все с использованием универсальных шаблонов - это также позволяет использовать Comparer<T>.Default и не-стандартные компараторы.

...