用于比较2个对象的通用代码

时间:2011-03-31 03:52:49

标签: c# .net comparison data-annotations

我有两个不同的对象需要进行相等性比较

我可以使用反射来编写一些代码来比较属性值但是想知道.net 4.0中是否有任何新模式可以解决这个问题

5 个答案:

答案 0 :(得分:6)

  

我可以使用反射来编写一些代码来比较属性值但是想知道.net 4.0中是否有任何新模式可以解决这个问题

没有。你必须自己写。

答案 1 :(得分:0)

您可以在公共接口中实现公共比较属性,并将它们作为该接口类型进行比较。

答案 2 :(得分:0)

您需要您的类实现IComparable,然后覆盖并实现CompareTo方法,以帮助C#了解它应该如何比较这些对象。

作为一个例子,我想比较两个小部件。它是一个包含整数和字符串的复杂类。我相信整数和字符串长度的组合将决定哪个对象更大。

Class MyWidget : IComparable
{
    public int Piece { get; set; }
    public string Thing { get; set; }
    public MyWidget()
    {
        this.Piece = 1;
        this.Thing = "default";
    }

    public int CompareTo(object obj)
    {
        var otherWidget = obj as MyWidget;
        if (otherWidget != null)
        {
            return (this.Piece + this.Thing.Length).CompareTo(otherWidget.Piece + otherWidget.Thing.Length);
        }
        else
        {
            throw new ArgumentException("Object is not a MyWidget");
        }
    }
}

答案 3 :(得分:0)

如果您要比较对象,可能需要重新定义 Equals()函数,如下所示:

        public override bool Equals(Object obj)
    {
        User testedUser = (User)obj;

        if (this._userName == testedUser.UserName &&
            this._userPassword == testedUser.UserPassword)
        {
            return true;
        }
        else
        {
            return false;
        }

    }

然后你可以简单地做一个:userbob.Equals(userAnne)

答案 4 :(得分:0)

对于比较大型obejct图表的快速方法,将每一边转储到json,然后使用text diff