Хорошо, я прочитал ваш вопрос совершенно неправильно в первом ответе. Вот лучше:)
Перегрузки - ваш лучший выбор. Поскольку результат сравнения зависит только от Name
, создайте метод, который делает это сравнение, а затем вызовите его:
private int Compare(string first, string second)
{
// do comparison
}
public int Compare(Type1 first, Type1 second)
{
return Compare(first.Name, second.Name):
}
public int Compare(Type2 first, Type2 second)
{
return Compare(first.Name, second.Name);
}
Edit:
Поскольку у вас есть несколько предметов, вы можете сделать две вещи:
public int Compare(string first1, string second1, X first2, X second2 ...
Но это будет немного уродливо. Альтернативой является предоставление прогноза для извлечения значений:
private int Compare<T>(T first, T second, Func<T,Tuple<string,int,TypeX,TypeY>> projection)
{
// test for first==null, second==null, etc...
var nicerFirst = projection(first);
var nicerSecond = projection(second);
// compare objects using nicerFirst.Item1, nicerFirst.Item2, etc.
}
Тогда ваше сравнение выглядит примерно так:
int Compare(Type1 first, Type1 second)
{
return Compare(first, second, x => Tuple.Create(x.Name, x.Int, x.X, x.Y));
}