gpt4 book ai didi

c# - Equals 和 GetHashCode 的最佳策略是什么?

转载 作者:IT王子 更新时间:2023-10-29 04:05:01 25 4
gpt4 key购买 nike

我正在处理域模型,并且正在考虑我们必须在 .NET 中实现这两种方法的各种方式。您的首选策略是什么?

这是我当前的实现:

public override bool Equals(object obj)
{
var newObj = obj as MyClass;

if (null != newObj)
{
return this.GetHashCode() == newObj.GetHashCode();
}
else
{
return base.Equals(obj);
}
}

// Since this is an entity I can use its Id
// When I don't have an Id, I usually make a composite key of the properties
public override int GetHashCode()
{
return String.Format("MyClass{0}", this.Id.ToString()).GetHashCode();
}

最佳答案

Domain-Driven Design区分实体值对象。这是一个很好的区别,因为它指导您如何实现 Equals。

实体如果它们的 ID 彼此相等,则它们是相等的。

值对象如果所有(重要的)组成元素都彼此相等,则它们是相等的。

在任何情况下,GetHashCode 的实现都应基于用于确定相等性的相同值。换句话说,对于实体,哈希码应该直接从 ID 计算,而对于值对象,哈希码应该从所有组成值计算。

关于c# - Equals 和 GetHashCode 的最佳策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2363143/

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