我有一个类看起来像这个
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);
}
}
我不太喜欢,因为IComparable<T>
接口正是这样做的。
现在。。。作为IComparer<T>
一个无状态接口,你可以自由地做……不会发生什么坏事。。。但我仍然不喜欢它,因为例如,像SortedDictionary<,>
这样的集合"保留"了对比较器的引用,所以它们会保留对完整对象(例如包含List<string> Bs
)的集合,从而浪费内存。然后,你会把什么传递给SortedDictionary<,>
?创建仅用作比较器的Foo
实例,还是Foo
的"完整"实例(包含数据)?(存在其寿命与SortedDictionary<,>
相同的问题)