2012-01-30 13 views
1

CustomObjectを使用して汎用優先キューをインスタンス化するときに、次のエラーが発生します。整数でインスタンス化するとうまくいきます。誰も私が問題を理解するのを助けることができますか?暗黙の参照変換エラーなし

エラーは、ライン上に表示されている:

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

エラーCS0311: `System.IComparable」(CS0311)に 'ジェネリック型またはメソッドHeap.PQueue<T>'. There is no implicit reference conversion from Heap.CustomObjectの' タイプHeap.CustomObject' cannot be used as type parameter T(ヒープ)

答えて

5

あなたの一般的な制約がIComparable<T>を必要としているが、あなたのCustomObjectIComparableを実装しています。あなたは実装する必要がありますIComparable<CustomObject>

+0

私の無知を許してください。 'IComparable 'と' IComparable'の実装の違いは何ですか? – Nemo

+2

それは公正な質問です:-) IComparableはIComparable と同じものではありません。コンパイラはジェネリック版とはまったく異なる型を作成しますが、それは強く型付けされます。 IComparableメソッドを見ると、オブジェクト 'type'で動作することがわかります。ジェネリック版は 'CustomObject'で直接動作します。 –

+1

もう1つの点は、IComparableの汎用バージョンと非汎用バージョンの両方を実装できない理由はありません。 –

関連する問題