这个问题来自Little Wonders: Comparer<T>.Default
。我想知道作者写的是什么:
如果您要比较的类型已经实现
IComparable<T>
或 如果类型为System.Nullable<T>
,其中T实现IComparable
, 在 System.Collections.Generic命名空间中有一个类被调用Comparer<T>
公开了一个名为Default的属性,它将创建一个 单例,表示该项的默认比较器 类型。
例如:
我有一个班级:
class Foo : IComparable<Foo> { ... }
public class FooComparer : IComparer<Foo> { ... }
Comparer类实现为public abstract class Comparer<T> : IComparer, IComparer<T>
。我的问题是Default Property的整体运作方式,它的作用以及它是如何工作的?
由于
答案 0 :(得分:3)
Comparer<T>.Default
不使用您的FooComparer
课程。它只返回内部类GenericComparer<T>
的实例
此类具有T
必须实现IComparable<T>
的约束,因此它可以简单地将对Compare
方法的调用委托给它传递的实例的Compare
方法。
这样的事情:
internal class GenericComparer<T> : Comparer<T> where T : IComparable<T>
{
public override int Compare(T x, T y)
{
if (x != null)
{
if (y != null)
return x.CompareTo(y);
return 1;
}
else
{
if (y != null)
return -1;
return 0;
}
}
// ...
}