将双数组转换为IComparable数组
-
03-07-2019 - |
题
我正在尝试使用VB.NET创建一个Quicksort基类,将其作为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.
错误是:
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
接口,或<=>委托 - 所有使用泛型 - 这也允许使用<=>和非默认的比较器。
不隶属于 StackOverflow