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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top