Я пытаюсь сравнить два списка С #, содержащих сложные объекты. Я знаю, что подобные вопросы задавались и раньше, но это немного другое. Я буквально следую примеру MSDN: https : //msdn.microsoft.com/en-us/library/bb300779 (v = vs.110) .aspx
public class ProductA
{
public string Name { get; set; }
public int Code { get; set; }
}
public class ProductComparer : IEqualityComparer<ProductA>
{
public bool Equals(ProductA x, ProductA y)
{
//Check whether the objects are the same object.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether the products' properties are equal.
return x != null && y != null && x.Code.Equals(y.Code) && x.Name.Equals(y.Name);
}
public int GetHashCode(ProductA obj)
{
//Get hash code for the Name field if it is not null.
int hashProductName = obj.Name == null ? 0 : obj.Name.GetHashCode();
//Get hash code for the Code field.
int hashProductCode = obj.Code.GetHashCode();
//Calculate the hash code for the product.
return hashProductName ^ hashProductCode;
}
}
Затем методом Except удалите "яблоко" 9 из списка.
ProductA[] fruits1 = { new ProductA { Name = "apple", Code = 9 },
new ProductA { Name = "orange", Code = 4 },
new ProductA { Name = "lemon", Code = 12 } };
ProductA[] fruits2 = { new ProductA { Name = "apple", Code = 9 } };
//Get all the elements from the first array //except for the elements from the second array.
IEnumerable<ProductA> except = fruits1.Except(fruits2);
foreach (var product in except)
Console.WriteLine(product.Name + " " + product.Code);
Этот код должен дать следующий результат: апельсин 4 лимон 12
Мой нет и распечатывает следующее: яблоко 9 апельсин 4 лимон 12
1 ответ
Похоже, в документации MSDN есть ошибка: https : //msdn.microsoft.com/en-us/library/bb300779 (v = vs.110) .aspx
Вызов метода Except должен использовать IEqualityComparer:
//Get all the elements from the first array //except for the elements from the second array.
ProductComparer pc = new ProductComparer();
IEnumerable<ProductA> except = fruits1.Except(fruits2, pc);
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.