如果由于某种原因您不必比较异构类型,我总是建议将通用和更通用(嗯,嗯,“通用”是正确的英文单词,愚蠢的 .NET 术语)结合使用非通用方法在一个类中,从非泛型调用泛型。大多数泛型排序将偏爱泛型方法,但非泛型将在那里与非泛型类型(例如ArrayList
)一起使用,以防万一出现。这也是两行的问题,在逻辑上是合理的,所以在这种情况下我不赞成 YAGNI。
检查空参数也是一个好主意,即使您不期望它们。我有几次因为没有这样做而被抓到,它们甚至可以被一些算法“人为地”引入。
public class Class1Comparer : IComparer<Class1>, IComparer
{
public int Compare(Class1 x, Class1 y)
{
if(x == null)
return y == null ? 0 : -1;
if(y == null)
return 1;
return DateTime.Compare(x.myDate, y.myDate);
}
public int Compare(object x, object y)
{
//This has no type-checking because you said above it isn't needed. I would normally add some just in case.
return Compare((Class1)x, (Class1)y);
}
}