2008年11月28日金曜日

IComparable<T>とその派生

以前、Dictionary<TKey, TValue>とIEquatable<T>で実行時エラーもなくハマる問題を書きましたが、今度は類似で実行時エラーでわかる問題がありました。

class Base: IComparable<Base>{
}
class Derived: Base{
}
とした場合、DerivedはIComparable<Base>を実装するため、通常の比較は行えます。しかしIComparable<Derived>は実装していないため、List<Derived>.Sort()などは行えません。

class Base<T>: IComparable<T> where T: Base{
}
class Derived: Base<Derived>{
}
とかやり出すか、素直にIComparableに切り替えるか。

0 件のコメント: