Если по какой-то причине вам не нужно сравнивать разнородные типы, я бы всегда рекомендовал комбинировать общее и более общее (да, хм, «общее» было бы правильным английским словом, глупая терминология .NET)универсальные подходы в одном классе, обращаясь к родовому от non-generic.Большинство родовых сортировок предпочтут универсальный метод, но неуниверсальный будет там для использования с неуниверсальным типом (например, 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);
}
}