c# .net Equals()函数重载, 像下面这样写好吗?
帮忙评审一下下面这个写法
class Product
{
public string Name;
public DateTime ExpiryDate;
public decimal Price;
public string[] Sizes;
public override bool Equals(object obj)
{
Product p2 = (Product)obj;
if (Name == p2.Name && ExpiryDate == p2.ExpiryDate && Price == p2.Price)
{
for (int i = 0; i < Sizes.Length; i++)
{
if (!Sizes[i].Equals(p2.Sizes[i]))
return false;
}
return true;
}
else
return true;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
一般实现 Equals 要同步实现 GetHashCode() 用于快速比较
Equals 的部分基本上没有问题,但是如果传入的为是
Produce
对象会抛异常,应该用obj as Product
代替(Product) obj
。另外在流程上作少许变更可以更清晰先判断
obj is Product
,以避免obj
不是Product
的情况。另外,可以把两个
Product
比较的逻辑放在双等运算符重载里面,Equals
中调用。具体逻辑没有什么统一的标准,比如你可以比较所有字段,也可以在有
id
的情况只比较id
,因业务而异。