IComparable を実装する汎用クラス「MinHeap(T)」を開発しようとしました。ジェネリックが「int」または別のクラス「コード」の場合、正常に機能します。さらに進んで、T にジェネリック クラス "Node(Code)" を使用すると、以下のエラーが発生します。
私はおそらく初心者で、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)' は、ジェネリック型またはメソッド 'Algorithms.MinHeap(T)' の型パラメーター 'T' として使用できません。「Algorithms.Node(Algorithms.Code)」から「System.IComparable」への暗黙的な参照変換はありません。