我使用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();