反射获取PropertyInfo PropertyInfo[] properties = t.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (PropertyInfo item in properties) { string name = item.Name; object value = item.GetValue(t, null); Console.WriteLine("{0}:{1}", name,value); }
在obj1里重载个equals来处理就是了,如:public class obj2 { public int Id1; public int Id2; public int Id3; public int Id4; } public class obj1 { public int Id1; public int Id2; public int Id3; public int Id4; public bool Equals(obj2 obj) { return this.Id1.Equals(obj.Id1) && this.Id2.Equals(obj.Id2) && this.Id3.Equals(obj.Id3) && this.Id4.Equals(obj.Id4); } }如果对比的不是一个类,而是多个,可以作成接口,然后再Equals(interface obj)就是了。不要作太多不可知的设计,反射是很好用,但是是有代价的。
public string Compare(object1 a, object1 b) { StringBuilder resultStr = new StringBuilder(); if (a.GetType() == b.GetType() && !a.Equals(b)) { PropertyInfo[] properties = typeof(object1).GetProperties(); for (int i = 0; i < properties.Length; i++) { if (!properties[i].GetValue(a, null).Equals(properties[i].GetValue(b, null))) { resultStr.Append(string.Concat(properties[i].Name, ":")); resultStr.Append(properties[i].GetValue(a, null)); resultStr.Append(" "); resultStr.Append(properties[i].GetValue(b, null)); resultStr.Append("<br />"); } } } return resultStr.ToString(); } }
因此,我就不知道他的类型是什么。
PropertyInfo[] properties = t.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach (PropertyInfo item in properties)
{
string name = item.Name;
object value = item.GetValue(t, null);
Console.WriteLine("{0}:{1}", name,value);
}
{
public int Id1;
public int Id2;
public int Id3;
public int Id4;
}
public class obj1
{
public int Id1;
public int Id2;
public int Id3;
public int Id4; public bool Equals(obj2 obj)
{
return this.Id1.Equals(obj.Id1) &&
this.Id2.Equals(obj.Id2) &&
this.Id3.Equals(obj.Id3) &&
this.Id4.Equals(obj.Id4);
}
}如果对比的不是一个类,而是多个,可以作成接口,然后再Equals(interface obj)就是了。不要作太多不可知的设计,反射是很好用,但是是有代价的。
{
StringBuilder resultStr = new StringBuilder();
if (a.GetType() == b.GetType() && !a.Equals(b))
{
PropertyInfo[] properties = typeof(object1).GetProperties();
for (int i = 0; i < properties.Length; i++)
{
if (!properties[i].GetValue(a, null).Equals(properties[i].GetValue(b, null)))
{
resultStr.Append(string.Concat(properties[i].Name, ":"));
resultStr.Append(properties[i].GetValue(a, null));
resultStr.Append(" ");
resultStr.Append(properties[i].GetValue(b, null));
resultStr.Append("<br />");
}
}
}
return resultStr.ToString();
}
}