method group不能分配给Icomparer

本文关键字:Icomparer DateTime 分配 group 不能 不能分 method | 更新日期: 2023-09-27 18:15:59

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

我想用 来命名它
Foo<DateTime> (DateTime.compare)

但是我得到这个错误:

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

我该如何解决这个问题?

TIA

method group不能分配给Icomparer<DateTime>

该方法需要一个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>的方法更多,因此我使用helper类从Comparison<T>生成IComparer<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));