创建一个类's自己的比较器



我有一个类看起来像这个

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<,>相同的问题)

最新更新