我希望能够得到一些关于如何编写通用函数进行列表比较的反馈。这些列表包含类对象,我们想要遍历一个列表,在第二个列表中查找相同的项,并报告任何差异。
我们已经有了比较类的方法,因此我们需要反馈如何从两个列表中提供方法(如下所示)。
例如,假设我们有一个简单的“Employee”类,它具有三个属性:Name、ID和Department。我们想要报告List和另一个List之间的差异。
注意: 两个列表始终包含相同数量的项。
如上所述,我们有一个通用的方法来比较两个类,如何将该方法纳入考虑以满足列表的需求?也就是说,从另一个方法中循环遍历列表并将类提供给通用方法...但如何找到第二个列表中的等效类以传递给以下方法?
我们已经有了比较类的方法,因此我们需要反馈如何从两个列表中提供方法(如下所示)。
例如,假设我们有一个简单的“Employee”类,它具有三个属性:Name、ID和Department。我们想要报告List和另一个List之间的差异。
注意: 两个列表始终包含相同数量的项。
如上所述,我们有一个通用的方法来比较两个类,如何将该方法纳入考虑以满足列表的需求?也就是说,从另一个方法中循环遍历列表并将类提供给通用方法...但如何找到第二个列表中的等效类以传递给以下方法?
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不可用。