做一个 Class 它自己的比较器

Make a Class it's Own Comparer

我有一个 class 看起来像这样

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<,> "keep" 这样的集合是对比较器的引用,因此它们会将集合保存为完整的对象(例如包含 List<string> Bs),从而浪费内存。然后,您会向 SortedDictionary<,> 传递什么? Foo 的实例仅用作比较器,还是 Foo 的 "full" 实例(包含数据)? (然后问题是它的生命周期将与 SortedDictionary<,> 相同)