没有隐式引用转换错误

Nem*_*emo 1 c#

使用CustomObject实例化我的通用优先级队列时,我收到以下错误.当我用整数实例化时,它运行良好.任何人都可以帮我解决这个问题.

错误出现在线上:

PQueue<CustomObject> pq = new PQueue<CustomObject>();
Run Code Online (Sandbox Code Playgroud)

错误CS0311:Heap.CustomObject' cannot be used as type parameter泛型类型或方法中的类型Heap.PQueue<T>'. There is no implicit reference conversion fromT'Heap.CustomObject'到`System.IComparable'(CS0311)(堆)

Joe*_*nez 5

你的通用约束是需要的IComparable<T>,但你CustomObject唯一的工具IComparable.你需要实施IComparable<CustomObject>

  • 这是一个公平的问题:-) IComparable与IComparable <CustomObject>不同.编译器将为泛型版本创建一个完全不同的类型,这是强类型的.如果查看IComparable方法,您将看到它以"对象"类型运行.通用版本直接使用'CustomObject'. (2认同)
  • @Nemo除了实现'public int CompareTo(object other)'之外,你还可以实现'public int CompareTo(CustomObject other)'.您的类声明将是公共类'CustomObject:IComparable,IComparable <CustomObject>' (2认同)