使用一个字段覆盖类中的 Equals 和 GetHashCode

2024-06-09

我有一堂课:

public abstract class AbstractDictionaryObject
    {
        public virtual int LangId { get; set; }

        public override bool Equals(object obj)
        {
            if (obj == null || obj.GetType() != GetType())
            {
                return false;
            }

            AbstractDictionaryObject other = (AbstractDictionaryObject)obj;
            if (other.LangId != LangId)
            {
                return false;
            }

            return true;
        }

        public override int GetHashCode()
        {
            int hashCode = 0;               
            hashCode = 19 * hashCode + LangId.GetHashCode();
            return hashCode;
        }

我有派生类:

public class Derived1:AbstractDictionaryObject
{...}

public class Derived2:AbstractDictionaryObject
{...}

In the AbstractDictionaryObject只有一个公共字段:LangId.
我认为这不足以(正确地)重载方法。
如何识别物体?


一方面,您可以简化这两种方法:

 public override bool Equals(object obj)
 {
     if (obj == null || obj.GetType() != GetType())
     {
         return false;
     }

     AbstractDictionaryObject other = (AbstractDictionaryObject)obj;
     return other.LangId == LangId;
 }

 public override int GetHashCode()
 {
     return LangId;
 }

但到那时应该没问题了。如果两个派生类有其他字段,则应覆盖它们GetHashCode and Equals他们自己,首先打电话base.Equals or base.GetHashCode然后应用他们自己的逻辑。

两个实例Derived1与相同的LangId就等价于AbstractDictionaryObject是有关的,两个实例也是如此Derived2- 但它们会彼此不同,因为它们有不同的类型。

如果你想给他们不同的哈希码你could change GetHashCode() to:

 public override int GetHashCode()
 {
     int hash = 17;
     hash = hash * 31 + GetType().GetHashCode();
     hash = hash * 31 + LangId;
     return hash;
 }

然而,不同对象的哈希码并不相同have与众不同……这只会有助于提高性能。如果您了解自己,您可能会想要这样做will具有相同类型的不同类型的实例LangId,但否则我不会打扰。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用一个字段覆盖类中的 Equals 和 GetHashCode 的相关文章

  • boost::asio + std::future - 关闭套接字后访问冲突

    我正在编写一个简单的 TCP 客户端来发送和接收单行文本 异步操作由 std future 处理 以便于超时阻塞查询 不幸的是 我的测试应用程序在破坏服务器对象时因访问冲突而崩溃 这是我的代码 TCP客户端 hpp ifndef TCPCL
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • 重复表顶部的行组作为 SSRS 中每个组之间的表标题

    我有一张表格 显示世界上所有国家 地区所有城市的人口和其他详细信息 我已成功在 SSRS 中创建此表 其中 国家 地区 列作为行组 现在 我不想让国家 地区名称占据第一列 而是希望将此信息作为表格标题 标题向上移动 以便有更多空间在表格右侧
  • Laravel 5.3 中 ajax POST 的最小工作示例

    有人可以用完整的最小示例解释 Laravel 5 3 中的 ajax post 方法吗 我知道网络上有一些资源 但我错过了一个简洁 直接的最小示例 我认为您对模型 控制器 视图范例有基本的了解 对 Laravel 有基本的了解 并对 Jav
  • 单击时如何来回交换文本?

    我需要的是来回交换文本 一个间隙 到Word单击它 我不想有按钮 用户只需单击间隙的位置即可 I see 这一页 https css tricks com swapping out text five different ways 准确地描
  • 如何获取 YouTube 频道名称?

    我已经搜索过YouTube 文档 https developers google com youtube v3 并没有找到任何可以从 YouTube 视频中获取其他频道名称的方法 That is 我目前想从以下位置获取频道名称video h
  • wp_mail(Wordpress 邮件功能)未发送到 gmail 或 live.co.uk 帐户

    我有一个网站 允许访问者通过两种方式联系我 通过其自己页面上的联系表单和侧边栏中的 ajax 小型联系表单 两种联系方式都会向我的 Gmail 帐户发送电子邮件 它自己页面上的联系表单工作正常 但ajax表单不会发送到gmail 也不会发送
  • iOS 非矩形图像裁剪? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Promise 的多路流的正确模式

    所以我在过去的几天里一直在玩承诺 只是试图转换一些项目 使用承诺 但我不止一次遇到这个问题 在阅读文章和教程时 一切看起来都很顺利和干净 getDataFromDB then makeCalculatons then getDataFrom
  • 如何获取 Python 类中的方法列表?

    我想迭代类中的方法 或者根据现有的方法以不同的方式处理类或实例对象 如何获取类方法列表 另请参阅 如何列出 a 中的方法 Python 2 5 模块 https stackoverflow com questions 1280787 how
  • Node.js 连接到 MySQL Docker 容器 ECONNREFUSED

    在将此问题标记为重复之前 请注意我确实阅读了其他答案 但它并没有解决我的问题 我有一个包含两个服务的 Docker compose 文件 version 3 services mysql image mysql 5 7 environmen
  • pyExcelerator 或 xlrd - 如何查找/搜索给定几列数据的行?

    Python 与 EXCEL 通信 我需要找到一种方法 以便我可以查找 搜索给定列数据的行 现在 我正在逐一扫描整个行 这将很有用 如果有一些功能 如查找 搜索 替换 我在 pyExcelerator 或 xlrd 模块中没有看到这些功能
  • 计算 pandas 数据框中的相同日期[重复]

    这个问题在这里已经有答案了 我有一个带有日期列的数据框 我想创建一个新列来告诉我数据集包含多少个相同的日期 这是原始数据集的一个最小示例 df1 date 2017 01 03 2017 01 03 2017 01 04 2017 01 0
  • 参数绑定到 ASP.NET MVC Core 中的路由或查询字符串

    我正在将 ASP NET MVC NET Framework Web 应用程序迁移到 ASP NET MVC Core 3 1 该应用程序是公司内部的 我们正在借此机会清理一些 API 路由 使它们更加 RESTful 例如 api Val
  • 嵌套路径和文件集有什么区别?

    我已经在谷歌上搜索 文件集和路径之间的差异 文章有一段时间了 但没有发现任何有用的东西 例如 以下内容有什么区别 比如说 有一个someDir目录 其中包含 jar 文件且没有子目录
  • Material UI V5 主题定制

    我如何覆盖material ui 的css 我想将颜色更改为 白色 因为当我尝试在文本字段上书写时 颜色是黑色 如果你想只是文本颜色为白色 你可以加sxTextField 的 prop
  • 如何让JPanel可滚动?

    我正在为我的大学项目创建 GUI 我试图了解如何JScrollPane works 我已经成功编写了简单的程序 以可滚动的方式显示图片 public class ScrollPaneTest public static void main
  • 将 C# Web 表单添加到 VB Web 应用程序

    有没有办法将 C Web 窗体添加到用 VB NET 编写的 ASP NET 4 0 Web 应用程序中 我有一个 ASP NET 2 0WEB SITE我最近转换为 ASP NET 4 0WEB应用程序 它主要是用 VB NET 编写的
  • Font Awesome 图标在 OSX Safari 中不起作用

    My font awesome图标在 Firefox 和 Chrome 中工作正常 但在 Safari 中我只看到其中一些图标的空白 而其他图标则看不到 截屏 如您所见 图标为fa twitter fa instagram和其他人只是没有出
  • 在简单整数列表语法中使用 AntLR4 中的访问者

    我是 AntLR 的新手 我使用的是AntLR4版本 我编写了以下属性语法 它识别整数列表并在末尾打印列表的总和 list g4 grammar list header import java util List import java u
  • 如何从外部 url 下载文件到变量?

    好吧 getfile 可用于从 SYSTEM 获取文件 但是 如何下载 site com t txt 我真的找不到它 而且我找到的东西没有用 如果之前问过 请重定向我 在带有 XMLHTTPRequest 的现代浏览器中 您要求做的事情非常
  • 使用一个字段覆盖类中的 Equals 和 GetHashCode

    我有一堂课 public abstract class AbstractDictionaryObject public virtual int LangId get set public override bool Equals objec