Comparer <t> .Default属性</t>

时间:2013-02-19 14:48:19

标签: c#

这个问题来自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的整体运作方式,它的作用以及它是如何工作的?

由于

1 个答案:

答案 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;
        }
    }

    // ...
}