Проверить равенство двух списков - PullRequest
0 голосов
/ 06 марта 2020

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

    public class SampleClass
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

    [TestMethod]
    public void EqualityTest()
    {
        var list1 = new List<SampleClass>
        {
            new SampleClass {Id  = "11", Name = "abc"},
            new SampleClass {Id  = "22", Name = "xyz"}
        };
        var list2 = new List<SampleClass>
        {
            new SampleClass {Id  = "11", Name = "abc"},
            new SampleClass {Id  = "22", Name = "xyz"}
        };
        Assert.IsTrue(Enumerable.SequenceEqual(list1, list2));
    }

, пожалуйста, предложите любое решение.

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Поскольку вы не переопределили Equals или не внедрили IEquatable<SampleClass>, вы просто получаете сравнение по умолчанию, которое проверяет, равны ли ссылки.

Вы хотите что-то вроде этого:

public class SampleClass : IEquatable<SampleClass>
{
    public string Id { get; set; }
    public string Name { get; set; }

    public bool Equals(SampleClass obj)
    {
      if(obj == null) return false;

      return obj.Id == this.Id && obj.Name == this.Name
    }

    public override bool Equals(object obj) => Equals(obj as SampleClass);
}
0 голосов
/ 06 марта 2020

Я бы рекомендовал использовать библиотеку глубокого сравнения, например Compare- Net -Objects

Просто импортируйте пакет NuGet

Install-Package CompareNETObjects

И вызовите вспомогательный метод

list1.ShouldCompare(list2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...