0
我想创建一个比较两个对象的比较器类的一般化方式。意味着它将检查两个对象内的字段,属性,对象,对象列表。我创建了将两个对象与其公共属性和字段进行比较的代码。但是想通过比较给定输入对象内的对象(和对象列表)来添加它。如何用反射创建比较器类?
public static class Comparer<T>
{
/// <summary>
/// Comparer method formcomparing two objects
/// </summary>
/// <param name="x">Object x of type T</param>
/// <param name="y">Object y of type T</param>
/// <returns>int value 0/1</returns>
public static int Compare(T x, T y)
{
Type type = typeof(T);
//Collecting public properties and fields
PropertyInfo[] properties = type.GetProperties();
FieldInfo[] fields = type.GetFields();
int compareValue = 0;
// Loop for comparing one by one properties values of two objects.
foreach (PropertyInfo property in properties)
{
IComparable valx = property.GetValue(x, null) as IComparable;
if (valx == null)
continue;
object valy = property.GetValue(y, null);
compareValue = valx.CompareTo(valy);
if (compareValue != 0)
return compareValue;
}
// Loop for comparing one by one fields values of two objects.
foreach (FieldInfo field in fields)
{
IComparable valx = field.GetValue(x) as IComparable;
if (valx == null)
continue;
object valy = field.GetValue(y);
compareValue = valx.CompareTo(valy);
if (compareValue != 0)
return compareValue;
}
return compareValue;
}
/// <summary>
/// Comparer method for comparing to list objects
/// </summary>
/// <param name="x">List object of T type</param>
/// <param name="y">List object of T type</param>
/// <returns>Result of comparision as true/false</returns>
public static bool Compare(List<T> x, List<T> y)
{
// Checking input lists as a null.
if (x == null || y == null)
{
return false;
}
// Checking input lists count is equal or not.
if (x.Count() != y.Count())
{
return false;
}
// Loop that invoke compare method for each of list objects.
for (int iCntr = 0; iCntr < x.Count(); iCntr++)
{
int result = Compare(x[iCntr], y[iCntr]);
if (result != 0)
{
return false;
}
}
return true;
}
}
你有什么想法来解决问题吗?请回复我,如果你发现任何裁判。
问候, 吉里什