IStructuralEquatable 和 IStructuralComparable 解决什么问题?

2023-12-06

我注意到 .NET 4 中添加了这两个接口以及几个相关的类。它们对我来说似乎有点多余;我读过几篇关于它们的博客,但我仍然不明白它们解决了哪些在 .NET 4 之前很棘手的问题。

有什么用IStructuralEquatable and IStructuralComparable?


.NET 中的所有类型都支持Object.Equals()方法,默​​认情况下比较两种类型引用相等。然而,有时,也希望能够比较两种类型结构平等.

最好的例子是数组,它在 .NET 4 中现在实现了IStructuralEquatable界面。这样就可以区分比较两个数组是为了引用相等,还​​是为了“结构相等”——它们是否具有相同数量的项目,并且在每个位置具有相同的值。这是一个例子:

int[] array1 = new int[] { 1, 5, 9 };
int[] array2 = new int[] { 1, 5, 9 };

// using reference comparison...
Console.WriteLine( array1.Equals( array2 ) ); // outputs false

// now using the System.Array implementation of IStructuralEquatable
Console.WriteLine(
    StructuralComparisons.StructuralEqualityComparer.Equals( array1, array2 )
); // outputs true

实现结构相等/可比较性的其他类型包括元组和匿名类型——它们都明显受益于基于其结构和内容执行比较的能力。

你没有问的一个问题是:

为什么我们有IStructuralComparable and IStructuralEquatable当已经有 存在于IComparable and IEquatable接口?

我要提供的答案是,一般来说,最好区分参考比较和结构比较。通常预计如果您实施IEquatable<T>.Equals你也将覆盖Object.Equals保持一致。在这种情况下,您将如何支持引用平等和结构平等?

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

IStructuralEquatable 和 IStructuralComparable 解决什么问题? 的相关文章

随机推荐

  • java 的 MP3/声音库有什么好的推荐吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找图书馆来 读取和
  • 找不到适合指定区域性的任何资源(资源文件中的 C# WinForm 图像)

    我将三个图像添加到名为 Resource1 resx 的文件中 我还添加了一根字符串只是为了测试目的 我在 GetString 或 GetObject image name 上收到此错误 找不到任何资源 适合特定文化 或中立文化 确保 Re
  • 使用 传递参数

    我使用 forEach 将参数传递给函数 代码如下
  • _ArrayType 或 _ArrayProtocol 在 Swift 3.1 中不可用吗?

    我正在使用 ArrayType在我的项目中 当我在 swift 2 1 上运行时 我上周升级到 swift 3 0 2 Xcode 8 2 1 我发现here that ArrayType更改为 ArrayProtocol而且效果很好 今天
  • 无法识别元素“folderLevelBuildProviders”?

    我使用Visual studio打开atomesite 我将MVC 1修改为MVC 2 构建成功 但网页给我这个错误 我尝试了 aspnet regiis iru 但不起作用 Server Error in Application Conf
  • 在 Elastic Search 中计算 *Facet 计数* 的有效方法

    我想计算构面查询 UI 的构面计数 但我认为我遗漏了一些东西 因为我无法使用构面过滤器获取所需的数字 这是一个例子 给定两个方面 每个方面具有三个可能的项 Colors red yellow blue Notes do re mi 当我进行
  • Python 终止符错误

    我正在和我的一个学校朋友一起开发一个 Python 项目 我们导入了 Turtle 和 Math 我的问题是 当我使用 Esc 按钮关闭窗口时 我收到一条错误消息 Terminator Error 我问过老师 但他们也不知道问题出在哪里 因
  • 如何使用文本扫描读取文件中的所有行

    我正在尝试使用以下内容读取 m 文件中的所有行 file content textscan fid s delimiter n whitespace 但这只是返回 file content 0x1 cell 实际上我的文件有 224 行 所
  • 如何下载在我的服务器(springboot)上生成的角度pdf文件?

    我想下载一个从基于 Spring 的 Restful Web 服务发送到我的 Angular 应用程序的 pdf 文件 如何下载它 我的 Angular 应用程序或 Spring Boot 上是否缺少一些代码 我从 Angular 6 应用
  • iPhone:屏幕截图[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 当用户进行屏幕截图时 按住主页按钮 电源 是否有任何方法在应用程序中调用 或者可以调用哪
  • 在 Python OpenCV 中解码 YUV 图像

    我有一个 YUV420 SP NV21 图像 表示为字节数组 无标头 取自 Android 预览帧 我需要将其解码为 RGB 图像 我之前在 Android 应用程序中使用 Java 和 OpenCV4Android 完成过此操作 conv
  • 使用 Visual Studio Code 自动保存文件更改

    我用过WebStorm从 JetBrains 工作已经快四年了 出于多种原因 它是一个出色的 IDE 但最好的功能之一是它可以在版本控制之外保存文件版本 因此 如果您在版本控制系统保存文件之前不小心删除了文件或丢失了文件 WebStorm
  • 如何完全禁用任何鼠标点击

    在用户单击 登录 按钮和其他事件后 我制作了一个加载脚本 让用户知道他们必须等待 直到 ajax 回复 如何禁用任何鼠标点击 右键单击 左键单击 双击 中键单击 x 单击 on div id doc 我想将该代码添加到loading js
  • 使用 OpenSSL “无法写入‘随机状态’”是什么意思?

    我正在生成一个自签名 SSL 证书来保护我的服务器的管理部分 并且我不断从 OpenSSL 收到此消息 无法写入 随机状态 这是什么意思 这是在 Ubuntu 服务器上 我已经升级了 libssl 来修复最近的安全漏洞 实际上 发生这种情况
  • 点击表单中的提交按钮后如何显示隐藏的div?

    我有一个带有提交按钮的简单 HTML 表单 点击此按钮后我想看看div my id这是以前不可见的
  • “zsh:找不到命令:sails”的问题

    我用 via 安装了 sails jssudo npm install g sails但我仍然得到zsh command not found sails 我正在使用 Ubuntu 14 04 LTS 首先找出节点的路径which node会
  • 错误 193 %1 不是有效的 Win32 应用程序

    当我运行此 python 命令时 我发现此错误 Error 193 1 不是有效的 Win32 应用程序Windll LoadLibrary C Windows System32 plcommpro dll 对于这个错误 我发现我的 plc
  • 需要 RestKit 数据同步场景的帮助

    我正在将 RestKit 用于 iOS To 应用程序 我已经使用restkit完成了以下操作 1 从rest api中以json格式拉取服务器对象 2 删除服务器上不再存在的核心数据中的孤立对象 现在我必须构建以下场景 如果设备上可以使用
  • 读取Excel单元格并将内容复制到txt文件

    我目前正在使用 RapidMiner 并尝试将 xlsx 文件中的 RapidMiner 结果复制到 txt 文件 以便使用 python 进行进一步处理 我在 A 列 A1 A1500 中有纯文本 在 C 列 C1 C1500 中有相应的
  • IStructuralEquatable 和 IStructuralComparable 解决什么问题?

    我注意到 NET 4 中添加了这两个接口以及几个相关的类 它们对我来说似乎有点多余 我读过几篇关于它们的博客 但我仍然不明白它们解决了哪些在 NET 4 之前很棘手的问题 有什么用IStructuralEquatable and IStru