首页 > 解决方案 > 检查相同的对象

问题描述

我怎么不能检查对象是否相等?我有 2 个类存储对象(带有类产品列表),我想找到共同产品,但是当我检查相同的 2 个产品对象时,它们并不相同。

class Storage
    {
       public List<Product> many_product;
       public Storage(List<Product> el)
        {
            this.many_product.AddRange(el);
        }
        public static Storage mutual_products(Storage a, Storage b)
        {
            Storage mutal_products = new Storage();
            foreach (var prod in a.many_product)
                if (b.many_product.Contains(prod))// return false, but in list is a mutual product
                {
                    mutal_products.many_product.Add(prod);
                }
            return mutal_products;
        }
     }

当我用 if(prod1==prod2)//return false 检查相同的产品时也是如此

标签: c#

解决方案


您的产品类应该实现IEquatable<Product>接口以使该Contains方法正常工作。例如:

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

    public double Price { get; set; }

    public bool Equals(Product other)
    {
        return Name.Equals(other.Name)
            && Price.Equals(other.Price);
    }
}

如果您使用的是 .NET 5 和 C# 9,则可以将您的Product类设为record. 那么就不需要IEquatable<Product>显式地实现了。


推荐阅读