我应该重载 == 运算符吗?

2024-01-22

如何==运算符在 C# 中真的起作用吗?如果它用于比较类的对象A,它会尝试匹配所有A的属性,还是会寻找指向同一内存位置(或者可能是其他位置)的指针?

让我们创建一个假设的例子。我正在编写一个利用 Twitter API 的应用程序,它有一个Tweet类,它具有单个推文的所有属性:文本、发件人、日期和时间、来源等。如果我想比较类的对象Tweet为了等效,我可以使用:

Tweet a, b;
if (a == b)
{
//do something...
}

那会吗检查所有属性的等价性 of the Tweet类之间a and b?

If not, 正确的方法是超载==操作员明确检查所有字段的等效性?

UPDATE:从前两个答案来看,我的假设是否正确:

  • If the ==运算符或Equals方法没有被类重载,==运算符为object使用类。
  • The ==运算符为object类检查内存位置是否相等。
  • 我必须超载==操作员或Equals方法来完成这个任务。
  • 在重载中,我必须手动检查属性的等效性,所以没有办法半自动地完成它,比如说,在循环中, right?

更新#2:Yuriy 评论说可以检查属性中的等价性==运算符与反射。如何才能做到这一点?你能给我一些示例代码吗?谢谢!


对于引用类型,两者的默认实现==运营商和Equals()方法将简单地检查两个对象是否具有相同的引用,因此是相同的实例。

如果您想检查两个不同对象的内容是否相等,那么您必须以一种或另一种方式自己编写代码来执行此操作。可以通过反射来完成(MbUnit http://www.mbunit.com/测试框架做了一些类似的事情),但是性能会受到严重影响,并且很有可能它不会完全达到您的预期,因此您应该实现== or Equals and GetHashCode用手。

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

我应该重载 == 运算符吗? 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 从客户端访问 DomainService 中的自定义对象

    我正在使用域服务从 Silverlight 客户端的数据库中获取数据 在DomainService1 cs中 我添加了以下内容 EnableClientAccess public class Product public int produ
  • 使用 GCP 的数据存储区时如何区分代码是在模拟器中运行还是在 GKE 中运行

    按照中给出的说明进行操作后 我不确定是否遗漏了任何内容https cloud google com datastore docs tools datastore emulator https cloud google com datasto
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 打破 ReadFile() 阻塞 - 命名管道 (Windows API)

    为了简化 这是一种命名管道服务器正在等待命名管道客户端写入管道的情况 使用 WriteFile 阻塞的 Windows API 是 ReadFile 服务器已创建启用阻塞的同步管道 无重叠 I O 客户端已连接 现在服务器正在等待一些数据
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • 根据列中的重复值对 Excel 中的值进行分组

    假设 我有数据 Column1 Column2 1 1000 1 2000 1 3000 2 2000 2 1000 3 5000 3 4000 我想显示它像 Column1 Column2 Column3 1 1000 3000 2 20
  • 如何使用值数组读取 appsettings.json

    我有以下 appSettings json 文件 SundrySettings CookieName Cookie AccessGroup Software Development Terminals Raucherplatz tablet
  • 计数器:对具有相同计数的元素进行排序

    该文档指定对于collections Counter most common https docs python org 3 6 library collections html collections Counter 具有相同计数的元素是
  • MessageBox.Show会导致服务器端超时问题吗?

    我有一个预定的 SSIS 包 其中包含script task in SQL Server Agent在我们的服务器上 我确实设置了timeout对于SQL连接 以及里面的一些代码Try块 它会抛出错误 并且有MessageBox Show在
  • 指针数据未存储在本地数据库中解析ios

    我有一个包含许多 includeKeys 的查询 它们是指向另一个类的指针 从解析云接收数据后 所有记录都使用本地存储pinAll方法 当我取回存储的结果时 我可以获取记录 但不能获取指针 请参阅下面的示例代码 query includeK
  • 那里有“函数大小分析器”吗?

    经过三年的 C 项目工作 可执行文件已增长到 4 MB 我想看看这些空间都去哪儿了 有没有一种工具可以报告最大的太空霸主是什么 如果能按类 类中的所有函数 模板 所有实例化 和库 有多少属于 C 标准库和 STL exe 中的每个库有多少
  • 无法在实体框架中调用DeleteObject - 缺少程序集引用?

    我正在尝试删除我的 asp net MVC3 Code first Entity Framework 应用程序中的一个对象 但我似乎没有必要的选项 因为它会出现 不包含 DeleteObject 的定义 错误 任何人都知道我是否缺少装配参考
  • 使用 C# 读取图像中的文本(数据)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法使用 C 读取图像中的文本 数字和字母 这可能吗 最好的方法是什么 Thanks http code google com
  • 使用php无法显示Google地图

    我有一个 php 代码 它从数据库 测试 和使用 wamp 中的 phpmyadmin 创建的表名 manu 获取位置信息 并使用标记在地图上显示这些位置 感测纬度和经度值中的位置详细信息 UPDATED
  • 如何使用 SELECT 语句 sql 在结果中显示“0”而不是 NULL?

    我有一个stored procedure这给了我一个输出 我将它存储在 temp表中 并且我将该输出传递给另一个scalar function 我如何显示而不是 NULL0SELECT语句sql的结果 例如 存储过程具有如下所示的 sele
  • OMP:OMP PARALLEL DO 和 OMP DO 之间有什么区别(根本没有并行指令)

    好的 我希望以前没有问过这个问题 因为在搜索中找到这个问题有点棘手 我查阅了F95手册 但仍然觉得含糊不清 For the simple case of DO i 0 99
  • 为什么 PHP-FPM 在写入 stdout 时会添加警告前缀?

    我尝试运行一个基于 Yii 的 PHP 应用程序 https github com codemix yii2 dockerized在 Docker 容器中使用官方 php fpm https hub docker com php image
  • 表单身份验证:禁用重定向到登录页面

    我有一个使用 ASP NET 表单身份验证的应用程序 在大多数情况下 它运行得很好 但我正在尝试通过 ashx 文件添加对简单 API 的支持 我希望 ashx 文件具有可选的身份验证 即 如果您不提供身份验证标头 那么它只能匿名工作 但是
  • 需要将整个postgreSQL数据库加载到RAM中

    如何将整个 PostgreSql 数据库放入 RAM 中以便更快地访问 我有 8GB 内存 我想将 2GB 专门用于数据库 我已阅读有关共享缓冲区设置的信息 但它仅缓存数据库中访问次数最多的片段 我需要一个解决方案 将整个数据库放入 RAM
  • 修剪字符串中的多个换行符和多个空格?

    如何修剪多个换行符 例如 text similique sunt in culpa qui officia deserunt mollitia animi id est laborum et dolorum fuga Et harum qu
  • Scrapy FormRequest 登录不起作用

    我正在尝试使用 Scrapy 登录 但收到大量 重定向 302 消息 当我使用真实登录信息以及虚假登录信息时 就会发生这种情况 我也尝试过另一个网站 但仍然没有成功 import scrapy from scrapy http import
  • JavaFX 初始化方法中的 NullPointerException

    我有控制器 我尝试从电子邮件服务器获取 INBOX 文件夹 下载下来就一切正常了 我可以将此数据 电子邮件主题 发件人 日期 放入 TableView 中 但是 仅当我等待负责在 TableView 中设置此数据的线程时 代码 The ta
  • 计算 iPhone 和门之间的距离,了解它们的物理宽度

    我有这样的场景 我知道 iPhone 屏幕的物理 不仅仅是像素 尺寸 我还知道门的宽度 现在 如果我打开 iPhone 摄像头 使用 UIImagePicker 或其他 并且我处于门的宽度完全适合摄像头宽度的位置 并且 iPhone 完全垂
  • 如何从 .jar 文件引用 .dll

    我有一个应用程序 它使用 jar 中的方法来调用 dll 这在我的机器上工作得很好 当应用程序解包或作为 jar 本身运行时 但是当 application jar 在另一台机器上运行时 外部 dll 位于系统路径上 它无法运行 dll 文
  • 我应该重载 == 运算符吗?

    如何 运算符在 C 中真的起作用吗 如果它用于比较类的对象A 它会尝试匹配所有A的属性 还是会寻找指向同一内存位置 或者可能是其他位置 的指针 让我们创建一个假设的例子 我正在编写一个利用 Twitter API 的应用程序 它有一个Twe