универсальный код для сравнения 2 объектов - PullRequest
0 голосов
/ 31 марта 2011

У меня есть два разных объекта, которые нужно сравнить на равенство.

Я могу написать некоторый код, используя отражение, чтобы сравнить значения свойств, но мне интересно, есть ли какие-либо новые шаблоны в .net 4.0 с таким адресомэто

Ответы [ 5 ]

6 голосов
/ 31 марта 2011

Я могу написать некоторый код, используя отражение для сравнения значений свойств, но мне интересно, есть ли какие-либо новые шаблоны в .net 4.0, которые обращаются к этому

Нет. Вам придется написать свой собственный.

0 голосов
/ 30 сентября 2016

Для быстрого и грязного метода сравнения больших графов объектов, свалите каждую сторону в json , а затем используйте text diff .

0 голосов
/ 31 марта 2011

Если вы сравниваете объекты, вы можете переопределить функцию 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)

0 голосов
/ 31 марта 2011

Вам нужен ваш класс для реализации 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");
        }
    }
}
0 голосов
/ 31 марта 2011

Вы можете реализовать общие свойства сравнения в общем интерфейсе и просто сравнить их как этот тип интерфейса.

...