Ваши классы одинаковы, поэтому я считаю, что вы хотите сделать, это сравнить два списка объектов типа MyObject
:
public class MyObject
{
public string Name { get; set; }
public string Value { set; get; }
public Guid ID { get; set; }
}
I найти самый простой способ сделать это, без необходимости писать отдельный IEqualityComparer
, заключается в том, чтобы класс MyObject
реализовал интерфейс IComparable
. Это объясняется подробно halfway down this page, но это то, что ваш класс будет выглядеть после реализации интерфейса:
public class MyObject : IEquatable <MyObject >
{
public string Name { get; set; }
public string Value { set; get; }
public Guid ID { get; set; }
public bool Equals(MyObject other)
{
//Check whether the compared object is null.
if (Object.ReferenceEquals(other, null)) return false;
//Check whether the compared object references the same data.
if (Object.ReferenceEquals(this, other)) return true;
//Check whether the objects properties are equal.
return Name.Equals(other.Name) && Value.Equals(other.Value) && ID.Equals(other.ID);
}
public override int GetHashCode()
{
//Get hash code for the Name field if it is not null.
int hashName = Name == null ? 0 : Name.GetHashCode();
//Get hash code for the Value field.
int hashCode = Value == null ? 0 : Value .GetHashCode();
//Get hash code for the IDfield.
int hashID = ID.GetHashCode();
//Calculate the hash code for the entire object.
return hashName^hashCode^hashId;
}
}
После того, как ваш класс имеет Equals()
и GetHashCode()
методы, метод LINQ Except()
будет автоматически работать:
List<MyObject> objects1 = { new MyObject{ Name = "apple", Value= "fruit", ID= 9 },
new MyObject{ Name = "orange", Value= "fruit", ID= 4 },
new MyObject{ Name = "lemon", Value= "fruit", ID= 12 } };
List<MyObject> objects2 = { new MyObject { Name = "apple", Value= "fruit", ID= 9 } };
List<MyObject> comparison = objects1.Except(objects2);
comparison
теперь имеет апельсин и лимон, но не яблоко. Мне нравится это решение из-за того, насколько читаемым является код в последней строке.
Что вы хотите сравнить? Списки или объекты в списках? – ChrisF
@ChrisF Позвольте мне исправить свой вопрос pls ... Done –
Перет перечисляет каждый объект в списке A и сравнивает его с каждым объектом в списке B. Проводка, которую вы пытались сделать, делает peoplel, как я, более охотно дающим вам больший намек. –