C# 检查两个对象在字段中是否包含相同的数据

C# 检查两个对象在字段中是否包含相同的数据,c#,.net,list,object,equality,C#,.net,List,Object,Equality,我有一个包含许多属性的Pharmacy类,通过将ID属性作为键,一个Pharmacy被声明为唯一的 我已经准备好了代码,可以将表中的所有行从MySQL返回到具有属性的Pharmacy对象 我想比较两个列表对象中的条目,检查两个表中是否存在相同的ID,如果不存在,则将其添加到新列表Equals的标准实现仅检查引用的相等性 您可以覆盖Equals的行为 或者实现一个自定义的IEqualityComparer。如果您的ORM映射器像Entity Framework一样依赖默认的equals,则这可能更

我有一个包含许多属性的Pharmacy类,通过将ID属性作为键,一个Pharmacy被声明为唯一的

我已经准备好了代码,可以将表中的所有行从MySQL返回到具有属性的Pharmacy对象


我想比较两个列表对象中的条目,检查两个表中是否存在相同的ID,如果不存在,则将其添加到新列表Equals的标准实现仅检查引用的相等性

您可以覆盖Equals的行为


或者实现一个自定义的IEqualityComparer。如果您的ORM映射器像Entity Framework一样依赖默认的equals,则这可能更可取。

您必须重写equals以比较ID属性,否则仅比较引用序列化两个对象并比较结果字符串,是否可以作为选项?
public class Pharmacy
{
    [Key]
    public string Tunniste { get; set; }
    public string Lyhenne { get; set; }
    public string PitkaNimi { get; set; }
    public string YlempiYksikko { get; set; }
    public string Hierarkiataso { get; set; }
    public string VoimassaoloAlkaa { get; set; }
    public string VoimassaoloPaattyy { get; set; }
    ...
}
        for (int i = 0; i != pharmacyListFromArchive.Count; i++)
        {
            if (pharmacyListFromArchive[i].Equals(pharmacyListFromNew[i]))
            {
                Console.WriteLine("Objects are identical.");
            }
            else
            {
                Console.WriteLine("Objects are NOT identical. {0} - {1}", pharmacyListFromArchive[i].Tunniste, pharmacyListFromNew[i].Tunniste);
            }
        }
public class Pharmacy  {
   // fields ...

   public override bool Equals(object obj) {
       // If parameter is null return false.
        if (obj == null) {
            return false;
        }

        // If parameter cannot be cast to Pharmacy return false.
        Pharmacy p = obj as Pharmacy;
        if ((System.Object)p == null) {
            return false;
        }

        // Return true if the fields match:
        return p.Lyhenne == this.Lyhenne &&
               p.PitkaNimi == this.PitkaNimi
               // && etc...
        ;
   }

    public override int GetHashCode() {
        return Lyhenne.GetHashCode() ^ PitkaNimi.GetHashCode() /* ^ etc ... */;
    }
}