这个问题来自这个小奇迹:Comparer<T>.Default 。我想知道作者在一行中写了什么:
如果要比较的类型已经实现
IComparable<T>或者类型是System.Nullable<T>T 实现的位置IComparable,则System.Collections.Generic 命名空间中有一个名为 的类,它公开一个名为 Default 的属性,该属性将创建一个单例,表示项目的默认比较器那种类型。Comparer<T>
例如:
我有一堂课:
class Foo : IComparable<Foo> { ... }
public class FooComparer : IComparer<Foo> { ... }
Run Code Online (Sandbox Code Playgroud)
比较器类实现为public abstract class Comparer<T> : IComparer, IComparer<T>. 我的问题是 Default 属性总体上是如何工作的,它有什么作用以及它是如何工作的?
谢谢
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;
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)