【问题标题】:No implicit reference conversion error没有隐式引用转换错误
【发布时间】:2012-01-30 13:00:18
【问题描述】:

使用 CustomObject 实例化我的通用优先级队列时出现以下错误。当我用整数实例化时,它运行良好。谁能帮我解决这个问题。

在线出现错误:

PQueue<CustomObject> pq = new PQueue<CustomObject>();

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    您的通用约束需要IComparable&lt;T&gt;,但您的CustomObject 仅实现IComparable。你需要实现IComparable&lt;CustomObject&gt;

    【讨论】:

    • 原谅我的无知。实现IComparable&lt;CustomObject&gt;IComparable有什么区别。
    • 这是一个公平的问题 :-) IComparable 与 IComparable 不同。编译器将为泛型版本创建一个完全不同的类型,这就是强类型。如果您查看 IComparable 方法,您将看到它使用“对象”类型进行操作。而通用版本直接与“CustomObject”一起使用。
    • 另外一点,没有理由不能同时实现 IComparable 的泛型和非泛型版本。
    • 如果这就是您所需要的,那也可以。 IComparable 只是为您提供了一个强类型方法。所以不是public int CompareTo(object obj),而是public int CompareTo(CustomObject obj)。这使您不必进行强制转换,因为编译器不会让任何人传入不同类型的对象。
    • @Nemo 除了实现“public int CompareTo(object other)”之外,您还可以实现“public int CompareTo(CustomObject other)”。您的类声明将是 public class 'CustomObject : IComparable, IComparable'
    猜你喜欢
    • 2018-12-28
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多