2011-11-27 61 views

回答

6

的方法,期望的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>方法,我用一个辅助类从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)); 
相关问题