使一个类成为它自己的比较器

时间:2015-06-29 08:43:09

标签: c# icomparer

我有一个看起来像这样的课程

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);
                }
            }

1 个答案:

答案 0 :(得分:5)

我不太喜欢,因为IComparable<T>界面正是这样做的。

现在......作为IComparer<T>无状态界面,你可以自由地做...没有什么不好的事情真的会发生......但我仍然不喜欢它,因为,例如,像SortedDictionary<,>&#34;保持&#34;对比较器的引用,因此它们会将一个集合保存到一个完整的对象(包含例如List<string> Bs),浪费内存。然后,你会传递给SortedDictionary<,>什么?创建的Foo实例仅用作比较器,或者#34; full&#34; Foo的实例(包含数据)? (然后问题是它的生命周期与SortedDictionary<,>

相同