我在类中添加了IEqualityComparer实现,不确定下面的代码是否是正确的,特别是Equals(object x, object y)函数:我们应该使用override还是对override方法进行new实现,比如:?
public class PropertySettings : IEqualityComparer
{
public int? Precision { get; set; }
public double? Min { get; set; }
public double? Max { get; set; }
public override bool Equals(object obj)
{
if (obj == null || !(obj is PropertySettings))
return false;
var ps = obj as PropertySettings;
return
ps.Precision == this.Precision &&
ps.Min == this.Min &&
ps.Max == this.Max;
}
public bool Equals(object x, object y)
{
if (x != null && x is PropertySettings)
return x.Equals(y);
else
return object.Equals(x, y);
}
public override int GetHashCode()
{
return HashCode.Combine(Precision, Min, Max);
}
public int GetHashCode(object obj)
{
if (obj == null)
return 0;
if (obj is PropertySettings)
return (obj as PropertySettings).GetHashCode();
else
return obj.GetHashCode();
}
}

发布于 2022-02-22 13:33:40
根据微软提供的IEqualityComparer代码示例,您将希望使用新关键字(因此隐藏对象的等于实现)来实现Equals。
正如下面Jeroen Mostert所指出的,这些可能是不正确的。他关于实现IEqualityComparer.Equals的建议也很有效。您也可以使用override。这些都将提供不同的功能,基于您的转换。以下是一个简短的解释:
基本上,使用override意味着您将使用您的.Equals实现,而不管您是object还是PropertySettings。如果您是对象时使用new,您将使用基本的.Equals(...功能(在本例中是object的功能)。如果显式实现IEqualityComparer.Equals(...,那么在将对象转换为IEqualityComparer时将使用.Equals。这让您可以选择如何使用您的类。
https://stackoverflow.com/questions/71221876
复制相似问题