如果出于某种原因不必比较异构类型,我总是建议将泛型和更通用的方法(嗯,嗯,“generic”应该是正确的英语单词,愚蠢的.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);
}
}