gpt4 book ai didi

c# - IEquatable 可以比较具有其他自定义对象列表属性的自定义对象吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:15 25 4
gpt4 key购买 nike

我想比较两个相同类型的自定义类对象。被比较的自定义类有一个 List 属性,其中填充了另一种自定义类型的项目。这可以通过继承 IEquatable 实现吗?

我不知道如何通过修改 MSDN's code 来完成这项工作比较包含自定义类型列表属性的类对象。

我确实成功地从 EqualityComparer class 派生了制作一个单独的比较类(下面的代码),但我想在被比较的实际类中实现比较能力。这是我到目前为止所拥有的:

编辑:这毕竟行不通。抱歉 - 我已经为此工作了一段时间,我可能粘贴了不正确的示例代码。我正在努力寻找我的工作解决方案......

class Program
{
static void Main(string[] args)
{
// Test the ContractComparer.

Contract a = new Contract("Contract X", new List<Commission>() { new Commission(1), new Commission(2), new Commission(3) });
Contract b = new Contract("Contract X", new List<Commission>() { new Commission(1), new Commission(2), new Commission(3) });

ContractComparer comparer = new ContractComparer();

Console.WriteLine(comparer.Equals(a, b));
// Output returns True. I can't get this to return
// True when I inherit IEquatable in my custom classes
// if I include the list property ("Commissions") in my
// comparison.

Console.ReadLine();
}
}

public class Contract
{
public string Name { get; set; }
public List<Commission> Commissions { get; set; }
public Contract(string name, List<Commission> commissions)
{
this.Name = name;
this.Commissions = commissions;
}
}

public class Commission
{
public int ID;
public Commission(int id)
{
this.ID = id;
}
}

public class ContractComparer : IEqualityComparer<Contract>
{

public bool Equals(Contract a, Contract b)
{
//Check whether the objects are the same object.
if (Object.ReferenceEquals(a, b)) return true;

//Check whether the contracts' properties are equal.
return a != null && b != null && a.Name.Equals(b.Name) && a.Commissions.Equals(b.Commissions);
}

public int GetHashCode(Contract obj)
{
int hashName = obj.Name.GetHashCode();
int hashCommissions = obj.Commissions.GetHashCode();

return hashName ^ hashCommissions;
}
}

最佳答案

你必须为 Commission 实现某种比较器,例如通过实现 Commission : IEquatable<Commission> ,然后使用它:

... && a.Commissions.SequenceEqual(b.Commissions)

关于c# - IEquatable 可以比较具有其他自定义对象列表属性的自定义对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22134945/

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