Поиск в коллекции List по нескольким значениям
Как сравнить эти List и записать разные строки в list3. Например если хотя бы одно значение не совпадает оно записывается в list3 вся строка где есть различия. Например первая строка List1 = 1.2.3.4 а List2 = 1.2.3.5 т.к. в них есть отличия то эта строка идет в list3. Если строки равны то они пропускаются.
public class DB
{
public string v { get; set; }
public string o { get; set; }
public string u { get; set; }
public string е { get; set; }
}
List<DB> list1 = new List<DB>();
List<DB> list2 = new List<DB>();
Ответы (1 шт):
Жмем на название класса, сбоку появится
, жмем на нее и выбираем "Создать Equals и GetHashCode..."
Далее откроется окно, в котором нам предложат выбрать те объекты, которые будут проверятся:
После всей этой процедуры, в классе будут созданы дополнительные методы (Equals и GetHashCode), которые послужат для сравнения двух классов. Я добавлю еще конструктор для удобства и в итоге класс будет выглядеть так (P.S. Ужасные наименования!!):
public class DB
{
public DB(string v, string o, string u, string e)
=> (this.v, this.o, this.u, this.e) = (v, o, u, e);
public string v { get; set; }
public string o { get; set; }
public string u { get; set; }
public string e { get; set; }
public override bool Equals(object obj) => obj is DB dB && v == dB.v && o == dB.o && u == dB.u && e == dB.e;
public override int GetHashCode()
{
var hashCode = 1452423071;
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(v);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(o);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(u);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(e);
return hashCode;
}
}
Теперь дело за малым, нам остается вызвать методы, которые сравнят объекты в коллекциях и вернут результат (Distinct, Union, Except и Intersect):
var list1 = new List<DB>
{
new DB("0", "1", "2", "3"),
new DB("4", "5", "6", "7")
};
var list2 = new List<DB>
{
new DB("1", "1", "2", "3"),
new DB("4", "5", "6", "7")
};
var result = list1.Except(list2);
После этого в result у нас будет 1 объект, DB("0", "1", "2", "3").

