2012-01-30 3 views
1

Je reçois l'erreur suivante lors de l'utilisation d'un objet CustomObject pour instancier ma file d'attente de priorité générique. Cela fonctionne bien quand j'instancie avec integer. Quelqu'un peut-il m'aider à comprendre le problème.Aucune erreur de conversion de référence implicite

L'erreur apparaît sur la ligne:

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

erreur CS0311: Le type Heap.CustomObject' cannot be used as type parameter T 'dans le type générique ou méthode Heap.PQueue<T>'. There is no implicit reference conversion from Heap.CustomObject' à `System.IComparable » (CS0311) (tas)

Répondre

5

votre contrainte générique exige IComparable<T>, mais votre seul CustomObject implémente IComparable. Vous devez mettre en œuvre IComparable<CustomObject>

+0

Pardonnez mon ignorance. Quelle est la différence entre l'implémentation de 'IComparable ' et 'IComparable'. – Nemo

+2

C'est une bonne question :-) IComparable n'est pas la même chose que IComparable . Le compilateur créera un type complètement différent pour la version générique qui est ce qui sera fortement typé. Si vous regardez la méthode IComparable, vous verrez qu'elle fonctionne avec le type 'object'. Alors que la version générique fonctionne directement avec 'CustomObject'. –

+1

un autre point, il n'y a aucune raison pour que vous ne puissiez pas implémenter les versions génériques et non génériques d'IComparable. –

Questions connexes