Я хотел бы получить отзыв о том, как лучше всего написать универсальную функцию, которая позволит сравнивать два списка. Списки содержат объекты класса, и мы хотели бы перебрать один список, найти тот же элемент во втором Списке и сообщить о любых различиях.
У нас уже есть метод для сравнения классов, поэтому нам нужна обратная связь о том, как мы можем использовать метод (показанный ниже) из двух списков.
Например, скажем, у нас есть простой класс «Сотрудник», который имеет три свойства: Имя, Идентификатор, Отдел. Мы хотим сообщить о различиях между списком и другим списком.
Примечание:
Оба списка всегда будут содержать одинаковое количество элементов.
Как упомянуто выше, у нас есть универсальный метод, который мы используем для сравнения двух классов, как мы можем включить этот метод для обслуживания списков, то есть из другого метода, выполнить цикл по списку и передать классы в универсальный метод .. .. но как нам найти эквивалентный класс во втором Списке, чтобы перейти к методу ниже;
public static string CompareTwoClass_ReturnDifferences<T1, T2>(T1 Orig, T2 Dest)
where T1 : class
where T2 : class
{
// Instantiate if necessary
if (Dest == null) throw new ArgumentNullException("Dest", "Destination class must first be instantiated.");
var Differences = CoreFormat.StringNoCharacters;
// Loop through each property in the destination
foreach (var DestProp in Dest.GetType().GetProperties())
{
// Find the matching property in the Orig class and compare
foreach (var OrigProp in Orig.GetType().GetProperties())
{
if (OrigProp.Name != DestProp.Name || OrigProp.PropertyType != DestProp.PropertyType) continue;
if (OrigProp.GetValue(Orig, null).ToString() != DestProp.GetValue(Dest, null).ToString())
Differences = Differences == CoreFormat.StringNoCharacters
? string.Format("{0}: {1} -> {2}", OrigProp.Name,
OrigProp.GetValue(Orig, null),
DestProp.GetValue(Dest, null))
: string.Format("{0} {1}{2}: {3} -> {4}", Differences,
Environment.NewLine,
OrigProp.Name,
OrigProp.GetValue(Orig, null),
DestProp.GetValue(Dest, null));
}
}
return Differences;
}
Любые предложения или идеи приветствуются?
Редактировать: Ориентация на .NET 2.0, поэтому о LINQ не может быть и речи.