在您无权访问的第 3 方类型上实现 Equals 和 GetHashCode 的最干净/最佳方法是什么?

发布于 2024-09-30 02:28:43 字数 329 浏览 1 评论 0原文

问题是你有一个第三方类型,例如下面的 ClassA。我无权访问该代码,并且它没有实现 Equals 和 GetHashCode,因此我认为我需要编写一个包装器类。 Equals 和 GetHashCode 实现应使用所有私有成员字段。

最好的方法是什么?我应该使用快捷方式或模式吗?

谢谢

public class ClassA
{
    public int FieldA {get; set;}
    public double FieldB { get; set; }
    public string FieldC { get; set; }
}

The problem is you have a 3rd party type e.g. ClassA below. I don't have access to the code and it doesn't implement Equals and GetHashCode therefore I need to write a wrapper class I think. The Equals and GetHashCode impls should use all the private member fields.

What's the best way to do this? Is there a shortcut or pattern I should be using?

Thanks

public class ClassA
{
    public int FieldA {get; set;}
    public double FieldB { get; set; }
    public string FieldC { get; set; }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

抱着落日 2024-10-07 02:28:43

如果您需要使用 ClassA 作为字典键,您可以实现自己的实现 IEqualityComparer 的类,并将其传递给字典的构造函数。这允许您重写类型的 GetHashCodeEquals 方法。

If you need to use ClassA as a dictionary key, you can implement your own class that implement IEqualityComparer<ClassA>, and pass it to the constructor of the dictionary. This allows you to override the type's GetHashCode and Equals methods.

合约呢 2024-10-07 02:28:43

我将从 ClassA 继承并覆盖 EqualsGetHashCode

您需要将实现基于公共属性,因为您无法访问私有字段。

I would inherit from ClassA and override Equals and GetHashCode.

You will need to base your implementation on the public properties, since there is no way you have access to the private fields.

吃不饱 2024-10-07 02:28:43

从ClassA继承自己的类,然后在其中实现GetHashCode和Equals。

Inherit your own class from ClassA and then implement GetHashCode and Equals in it.

夜声 2024-10-07 02:28:43

根据上面的 Griver 和 Driis - 继承或聚合 ClassA 并基于 a 属性实现 Equals。

MSDN 在此处发布了一些指南

As per Griver and Driis above - inherit or aggregate ClassA and implement Equals based on the a properties.

MSDN publishes some guidelines here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文