如何只获得不同的领域

时间:2011-07-18 22:52:13

标签: c# c#-2.0

我有一个班级的两个对象。

我需要将每个字段与另一个字段进行比较,如果数据不同以进行某些操作

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

4 个答案:

答案 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进行比较。

This might help you

And this one too

修改

我认为如果你的对象也实现了相同的界面会更容易。

答案 2 :(得分:1)

Make A类:IComparable并定义CompareTo()

的逻辑

然后你可以使用A.CompareTo。好处是你可以在List&lt;&gt;中使用它。如果你需要排序。

答案 3 :(得分:0)

你可以用很多不同的方式做到这一点。最好的一个是属性列表的长度。最简单的方法是迭代第一个列表,对于每个项目,迭代第二个列表并尝试识别它们是否是不同的。

对于大型列表(&gt; 20),大小相似(+/- 20%),您应对两个列表进行排序,迭代识别匹配项。

对于长度不一致的大型列表,您可以使用较大的列表构建字典,迭代较小的列表,查找上一个构建的字典中的匹配项。