ダブル配列をIComparable配列に変換する
-
03-07-2019 - |
質問
VB.NETを使用して、IComparable要素の配列を取得する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コンパイラがこれを許可しないのはなぜですか?
解決
double
はIComparable
にキャストできますが、double[]
をIComparable[]
にキャストできるという意味ではありません。簡単なオプションは、新しいIComparable<T>
配列を作成してデータをコピーすることです。または、場合によっては、元の配列をIComparer<T>
として開始するだけです。
実際には、ジェネリックComparison<T>
またはComparer<T>.Default
インターフェース、または<=>デリゲートを使用したいと思います-すべてジェネリックを使用します-これにより、<=>およびデフォルト以外の比較器も使用できます。 p>
所属していません StackOverflow