【发布时间】:2012-01-30 06:48:08
【问题描述】:
我正在尝试编写一个通用的堆排序算法。我收到以下错误。可能是什么原因?
类型
T不能作为泛型类型中的类型参数T或方法Heap.MainClass.MaxHeapify<T>(T[], int, int)。没有 装箱或类型参数从T转换为System.IComparable<T>(CS0314) (堆排序)
【问题讨论】:
标签: c#
我正在尝试编写一个通用的堆排序算法。我收到以下错误。可能是什么原因?
类型
T不能作为泛型类型中的类型参数T或方法Heap.MainClass.MaxHeapify<T>(T[], int, int)。没有 装箱或类型参数从T转换为System.IComparable<T>(CS0314) (堆排序)
【问题讨论】:
标签: c#
您还需要指定 T 必须在 HeapSort 函数上实现 IComparable<T> 的相同通用约束:
private static void HeapSort<T>(T[] items) where T : IComparable<T>
您在MaxHeapify 方法上指定了这个约束,为了调用它,T 必须满足这个条件。
【讨论】:
MaxHeapify<T>() 方法具有where T : IComparable 的通用约束,但您的HeapSort<T>() 方法没有它,因此编译器无法解析从 HeapSort 方法对 MaxHeapify 的调用。
您还应该将where : IComparable 的通用约束添加到您的HeapSort<T>() 方法中。
private static void HeapSort<T>(T[] items) where T : IComparable<T>
【讨论】: