1

IComparable 要素の配列を取得して、VB.NET を使用して Quicksort 基本クラスを作成しようとしています。署名は次のようになります。

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 コンパイラでこれができないのはなぜですか?

4

1 に答える 1

4

doubleにキャストできますが、にキャストできるわけIComparableではありません。簡単なオプションは、新しい配列を作成してデータをコピーすることです。または、この場合は、元の配列をとして開始します。double[]IComparable[]IComparable[]IComparable[]

実際、私はジェネリックIComparable<T>またはIComparer<T>インターフェース、あるいはComparison<T>デリゲート(すべてジェネリックを使用)を使用したくなるでしょう。これにより、Comparer<T>.Defaultデフォルト以外の比較子も使用できるようになります。

于 2008-10-15T20:42:11.437 に答える