これは、C#ジェネリック/デザインパターンマスターにとっての課題です。
ジェネリックヒープを実装してから、ヒープを使用する優先キューを実装しようとしています。
私のヒープの署名は次のとおりです。
class Heap<TKey, TValue> where TKey : IComparable<TKey>
私の優先キュークラスは次のとおりです。
public delegate IComparable<T> Evaluator<T>(T item);
class PriorityQueue<T> : IQueue<T>
{
Evaluator<T> Evaluate;
Heap<IComparable<T>, T> m_heap;
public PriorityQueue(Evaluator<T> evaluateFunction)
{
Evaluate = evaluateFunction;
m_heap = new Heap<int, T>(HeapType.MinHeap);
}
...
public void Insert(T element)
{
m_heap.Insert(Evaluate(element), element);
}
...
しかし、そうするとき、コンパイラは(当然のことながら)IComparebleがIComparebleインターフェイスを実装していないと文句を言います。
Heap<IComparable<T>, T> m_heap;
と競合する
where TKey : IComparable<TKey>
これを解決するために何ができますか?!
完全なコンパイラエラー:
The type 'System.IComparable<T>' cannot be used as type parameter 'TKey' in the generic type or method 'Heap<TKey,TValue>'. There is no implicit reference conversion from 'System.IComparable<T>' to 'System.IComparable<System.IComparable<T>>'.