我有一个看起来像这样的课程
public class Foo
{
public int A { get; set; }
public List<string> Bs { get; set; }
}
一个看起来像这样的比较器
public class FooComparer : IComparer<Foo>
{
public int Compare(Foo x, Foo y)
{
return x.A.CompareTo(y.A);
}
}
我想把这些结合成一件事但是担心这不是好的做法或只是出现奇怪。您对此有何看法
public class Foo : IComparer<Foo>
{
public int A { get; set; }
public List<string> Bs { get; set; }
public int Compare(Foo x, Foo y)
{
return x.A.CompareTo(y.A);
}
}
答案 0 :(得分:5)
我不太喜欢,因为IComparable<T>
界面正是这样做的。
现在......作为IComparer<T>
无状态界面,你可以自由地做...没有什么不好的事情真的会发生......但我仍然不喜欢它,因为,例如,像SortedDictionary<,>
&#34;保持&#34;对比较器的引用,因此它们会将一个集合保存到一个完整的对象(包含例如List<string> Bs
),浪费内存。然后,你会传递给SortedDictionary<,>
什么?创建的Foo
实例仅用作比较器,或者#34; full&#34; Foo
的实例(包含数据)? (然后问题是它的生命周期与SortedDictionary<,>
)