2008-10-15 7 views
1

VB.NET을 사용하여 Quicksort 기본 클래스를 만들고 IComparable 요소의 배열을 사용하려고합니다. 나는 복식의 배열에 통과 할 때, 그러나이중 배열을 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. 

오류는 다음의가에서 IComparable을 구현하는 두 배로

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 컴파일러가 왜 그렇게 할 수 없습니까?

답변

4

doubleIComparable으로 캐스트 할 수 있지만, 을 IComparable[]으로 캐스트 할 수있는 것은 아닙니다. 간단한 옵션은 새로운 IComparable[] 배열을 만들고 데이터를 복사하는 것입니다. 또는 귀하의 경우에는 원래 배열을 IComparable[]으로 시작하기 만하면됩니다. 모든 사용하는 제네릭 - -

사실, 일반 IComparable<T> 또는 IComparer<T> 인터페이스, 또는 Comparison<T> 대리자를 사용하도록 유혹 할 것 이것은 또한 Comparer<T>.Default 및 기본이 아닌 comparers의 사용할 수 있습니다.

+0

아, 맞아. 실제로 새로운 언어 기능을 사용해야합니다. –

+0

제네릭을 사용하여 정렬 방법을 작성하는 방법을 보여줄 수 있습니까? – Alex

+0

@Alex에는 더 많은 컨텍스트가 필요합니다. 입력 내용은 무엇입니까? 그러나 다음 중 하나 : IComparable-of-T, IComparer-of-T 또는 Comparer-of-T.Default –

관련 문제