我有一个班级的两个对象。
我需要将每个字段与另一个字段进行比较,如果数据不同以进行某些操作
class A
{
int id;
string text;
public int Id
{
get { return id; }
}
public string Text
{
get { return text; }
}
}
我认为:
Dictionary<string, string> list = aObj.different(bObj);
list.Key - name property
list.Value - value of the bObj if it is different
答案 0 :(得分:3)
public Dictionary<string, object> GetDifferences(A target)
{
Dictionary<string, object> differences = new Dictionary<string, object>();
foreach (PropertyInfo pi in typeof(A).GetProperties())
{
if (!pi.GetValue(this, null).Equals(pi.GetValue(target, null)))
differences.Add(pi.Name, pi.GetValue(target, null));
}
return differences;
}
答案 1 :(得分:1)
我可能会写一个帮助器,它使用反射来获取两个对象的属性,循环遍历它们并将值1比1进行比较。
修改强>
我认为如果你的对象也实现了相同的界面会更容易。
答案 2 :(得分:1)
Make A类:IComparable并定义CompareTo()
的逻辑然后你可以使用A.CompareTo。好处是你可以在List&lt;&gt;中使用它。如果你需要排序。
答案 3 :(得分:0)
你可以用很多不同的方式做到这一点。最好的一个是属性列表的长度。最简单的方法是迭代第一个列表,对于每个项目,迭代第二个列表并尝试识别它们是否是不同的。
对于大型列表(&gt; 20),大小相似(+/- 20%),您应对两个列表进行排序,迭代识别匹配项。
对于长度不一致的大型列表,您可以使用较大的列表构建字典,迭代较小的列表,查找上一个构建的字典中的匹配项。