2012-01-30 27 views
1

使用CustomObject實例化我的通用優先級隊列時出現以下錯誤。當我使用整數實例化時,它運行良好。任何人都可以幫我弄清楚這個問題。沒有隱含的引用轉換錯誤

的誤差出現在導線:

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

錯誤CS0311: '在通用類型或方法Heap.PQueue<T>'. There is no implicit reference conversion from Heap.CustomObject' 的類型Heap.CustomObject' cannot be used as type parameter噸至 `System.IComparable」(CS0311)(堆)

回答

5

你的通用約束要求IComparable<T>,但你的CustomObject只實現IComparable。你需要實施IComparable<CustomObject>

+0

原諒我的無知。實現'IComparable '和'IComparable'有什麼區別? – Nemo 2012-01-30 04:45:40

+2

這是一個公平的問題:-) IComparable和IComparable 不是一回事。編譯器將爲泛型版本創建一個完全不同的類型,這就是我們的強類型。如果您查看IComparable方法,您會看到它使用'object'類型進行操作。而通用版本直接與'CustomObject'一起工作。 – 2012-01-30 04:48:07

+1

另一方面,沒有理由不能實現IComparable的通用和非通用版本。 – 2012-01-30 04:48:50

相關問題