我写Foo<T>(IComparer<T> comp)

我想用

Foo<DateTime> (DateTime.compare)


但我得到这个错误:


  方法组不可分配给IComparer<DateTime>


我该如何解决?

TIA

最佳答案

该方法需要IComparer<T>的实例,而不是委托。您需要创建一个实现IComparer<DateTime>的类:

public class DateTimeComparer : IComparer<DateTime>
{
    public int Compare(DateTime x, DateTime y)
    {
        return x.Compare(y);
    }
}


另外,您可以更改方法,使其期望Comparison<DateTime>

void Foo<T>(Comparison<T> comparison)


然后,您可以直接将DateTime.Compare作为参数传递。

由于需要IComparer<T>而不是Comparison<T>的方法更多,因此我使用帮助器类从IComparer<T>生成Comparison<T>

public class ComparisonComparer<T> : IComparer<T>
{
    private readonly Comparison<T> _comparison;

    public ComparisonComparer(Comparison<T> comparison)
    {
        _comparison = comparison;
    }

    public int Compare(T x, T y)
    {
        return _comparison(x, y);
    }
}


您可以按以下方式使用它:

Foo(new ComparisonComparer(DateTime.Compare));

10-07 15:29