方法组不能分配给Icomparer <DateTime>

Ela*_*nda 1 .net c#

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

我想跟它打电话

Foo<DateTime> (DateTime.compare)
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

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

我该怎么解决这个问题?

TIA

Tho*_*que 6

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

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

或者,您可以更改方法,以便它期望Comparison<DateTime>:

void Foo<T>(Comparison<T> comparison)
Run Code Online (Sandbox Code Playgroud)

然后你可以DateTime.Compare直接作为参数传递.

由于有更多的方法需要a而IComparer<T>不是a 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Foo(new ComparisonComparer(DateTime.Compare));
Run Code Online (Sandbox Code Playgroud)