2011-11-27 58 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)); 
相關問題