接口</t>的IComparable <t>

时间:2014-11-12 03:51:02

标签: c# comparison

我使用PowerCollections OrderedBag<IObject>来区分两个多重集,因此我需要在每个IObject中使用IComparable<IObject>。问题 - IObject只是标记。不同的班级没有自然顺序。在这种情况下如何进行比较?我试过了

public virtual int CompareTo(IObject o)
{
    return this.Equals(o) ? 0 : -1;
}

但这在OrderedBag.Difference()中提供了错误的数字:

copiesInThis = this.NumberOfCopies(item);

解决方案吗

添加&#34;订单&#34;,例如Measure&lt; Comment&lt; Word。为每个IObject添加IComparable<>。并且比较所有可能的情况:

var measure = o as Measure;
if (measure != null)
    return 1;

var comment = o as Comment;
if (comment != null)
    return this.CompareTo(comment);

var word = o as Word;
if (word != null)
    return -1;

throw new ArgumentOutOfRangeException();

0 个答案:

没有答案