A conversão de matriz dupla a matriz IComparable
-
03-07-2019 - |
Pergunta
Eu estou tentando criar uma classe base Quicksort usando VB.NET, levando-a uma matriz de elementos IComparable. Os olhares de assinatura como este:
public shared sub Sort(ByVal values() as IComparable)
No entanto, quando eu passar em uma matriz de duplas, o compilador está me dando erros.
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.
O erro é:
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
A documentação .NET Isso é o dobro implementar IComparable. Por que não é o compilador .NET me deixar fazer isso?
Solução
Embora double
pode ser convertido para IComparable
, isso não significa que double[]
pode ser convertido para IComparable[]
. Uma opção simples seria a de criar uma nova matriz IComparable[]
e copiar os dados mais -. Ou no seu caso, basta iniciar a matriz original como IComparable[]
Na verdade, eu estaria tentado a usar os IComparable<T>
ou IComparer<T>
interfaces genéricas, ou o delegado Comparison<T>
- todos usando genéricos -. Isso também permite o uso de Comparer<T>.Default
e não-padrão comparadores