2016-06-12 4 views
0

ジェネリックスを使用してC#でバイナリ検索ツリーを実装しようとしていますが、IComparableインターフェイスの実装方法はわかりません。私は汎用タイプTを比較できないので、CompareTo()の機能を実装する方法がわかりません。C#ジェネリッククラスの型とIComparableは型を比較できませんT

public class BSTNode<T> : IComparable<BSTNode<T>> 
{ 
    public T Data { get; set; } 
    public BSTNode<T> LeftChild { get; private set; } 
    public BSTNode<T> RightChild { get; private set; } 

    ... 
} 

public void Insert(BSTNode<T> node)を実装しようとしたとき、私はDataプロパティを比較する必要があるが、私はエラーを取得する私はジェネリック型を比較す​​ることはできませんと言ってT.

私が実装しようとした。ここでは

コードですIComparableインターフェイスがCompareTo関数では、Tエラーと比較できないのと同じです。どのように私はこれを修正することができる任意のアイデア?あなたはDataCompareToを呼び出すようになる

public class BSTNode<T> : IComparable<BSTNode<T>> 
    where T : IComparable<T> 

:あなたが必要なもの

+1

おそらく 'T'は' IComparable'も実装しているはずです。 – Tdorno

+0

私はその質問を見ましたが、タイプTにCompareToメンバ関数がないというエラーが表示されます。 – Naz

+1

'パブリッククラスBSTNode :IComparableを> T:IComparable' – Tdorno

答えて

2

ジェネリック型に制約を追加すると、それが機能します。

public class BSTNode<T> : IComparable<BSTNode<T>> where T : IComparable<T> 
{ 
    public T Data { get; set; } 
    public BSTNode<T> LeftChild { get; private set; } 
    public BSTNode<T> RightChild { get; private set; } 

    public int CompareTo(BSTNode<T> other) 
    { 
     return this.Data.CompareTo(other.Data); 
    } 
} 
関連する問題