做一个 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<,>
相同)
我有一个 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<,>
相同)