我試圖開發一個實現IComparable的泛型類「MinHeap(T)」。當泛型爲「int」或其他類「代碼」時,它工作正常。進一步使用T的泛型類「節點(代碼)」 會導致下面提到的錯誤。泛型和IComparable - 錯誤CS00301
我可能太新,不瞭解IComparable和IComparable(T)之間的微妙差異。有人有想法嗎? 預先感謝您的幫助, LJ
public class MinHeap<T> where T : IComparable
{
...
}
public class Node<T> where T : IComparable
{
T data
...
public int CompareTo(object obj)
{
Node<T> otherNode = obj as Node<T>;
return this.data.CompareTo(otherNode.data);
}
...
}
public class Code : IComparable
{
public int freq;
...
public int CompareTo(object obj)
{
Code otherCode = obj as Code;
return this.freq.CompareTo(otherCode.freq);
}
}
static void Main(string[] args)
{
MinHeap<int> hInt = new MaxHeap<int>(heapSeed); // works fine
MinHeap<Code> hCode = new MinHeap<Code>(codeList); // works fine
...
Node<Code>[] nodeCodeList = new Node<Code>[freqList.Length]; // ok
MinHeap<Node<Code>> h = new MinHeap<Node<Code>>(nodeCodeList); // Error
...
}
錯誤消息:
錯誤2類型 'Algorithms.Node(Algorithms.Code)' 不能被用作類型參數 'T' 在泛型類型或方法'Algorithms.MinHeap(T)'。沒有從'Algorithms.Node(Algorithms.Code)'到'System.IComparable'的隱式引用轉換。
'T'不僅應該可比,'節點'也應該是。 –
leppie
以下應該工作:'公共類節點:IComparable其中T:IComparable'。 MinHeap也一樣。 @Aphelion有解釋。 –
leppie
現在工作正常 - 這是沒有必要做同樣的MinHeap - 非常感謝 –
CSJNL