gpt4 book ai didi

c# - 检查 2 个对象是否在字段中包含相同的数据

转载 作者:行者123 更新时间:2023-11-30 20:28:59 25 4
gpt4 key购买 nike

我有一个 Pharmacy包含大量属性的类,以及一个 Pharmacy通过具有 ID 声明为唯一的属性(property)作为 key 。

我有代码可以将表中的所有行从 MySQL 取回 Pharmacy具有属性的对象。

我想比较两个 List<Pharmacy>对象中的条目并检查是否相同 ID存在于两个表中,如果不存在则将其添加到新的 List<Pharmacy .如果ID两者都存在但对象中的数据不同,然后将该对象保存到新的 List<Pharmacy还有。

这就是类的样子。

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);
}
}

但是当我运行它时,没有一个对象注册为相同的,即使它们在数据上是相同的。我该如何解决这个问题?

最佳答案

Equals 的标准实现只检查引用是否相等。 What is the default behavior of Equals Method?

您可以覆盖Equals 的行为。 Guidelines for Overriding Equals() and Operator == (C# Programming Guide) .

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 ... */;
}
}

或者您实现自定义 IEqualityComparer IEqualityComparer Interface .如果您的 ORM 映射器依赖于默认的 equals(就像 Entity Framework 那样),这可能更可取。

关于c# - 检查 2 个对象是否在字段中包含相同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46724869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com