Преобразование двойного массива в массив IComparable

StackOverflow https://stackoverflow.com/questions/206191

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top