如果您不担心性能,你可以使用反射的效用函数来遍历每个字段,并比较它们的值。
using System;
using System.Reflection;
public static class ObjectHelper<t>
{
public static int Compare(T x, T y)
{
Type type = typeof(T);
var publicBinding = BindingFlags.DeclaredOnly | BindingFlags.Public;
PropertyInfo[] properties = type.GetProperties(publicBinding);
FieldInfo[] fields = type.GetFields(publicBinding);
int compareValue = 0;
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;
}
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;
}
}
谢谢,我会尝试出你的代码。 – 2009-10-31 00:45:45
嗯,我试了一下,但是'properties'和'fields'数组是空的。 – 2009-10-31 01:16:29
找到原因。删除publicBinding变量,或者使用一些与DeclaredOnly或Public不同的枚举类型。 – 2009-10-31 01:44:22