C# IComparer 标准用法问题

2024-04-15

我有一个问题,这是否是在 C# 中使用 IComparer 的标准。假设我有一个情况,其中有三个 Person 对象:P1、P2 和 P3。假设我调用 Compare 方法并传入 P1 和 P2,结果为 0。这本质上意味着两个人应该被归类为相等。现在假设我调用传入 P2 和 P3 的 Compare 方法,结果也是 0。同样,这意味着两个人是平等的。从逻辑上讲,可以假设P1和P3也相等;然而,Compare 方法可以被实现,但是有人决定实现它。那么在这种情况下 P1 和 P3 也返回 0 的方式实现它是一个标准吗?

这是我要问的代码:

// Assume these are initialized properly
Person p1 = null, p2 = null, p3 = null;
IComparer<Person> comparer = null;

// Compare person 1 to person 2 and result is 0
Debug.Assert(comparer.Compare(p1, p2) == 0);

// Compare person 2 to person 3 and result is 0
Debug.Assert(comparer.Compare(p2, p3) == 0);

// Would this be a fair assumption that person 1 and person 3 would also be 0?
Debug.Assert(comparer.Compare(p1, p3) == 0);

它与 C# 无关,它是一个简单的数学规则:传递性:http://en.wikipedia.org/wiki/Transitive_relation http://en.wikipedia.org/wiki/Transitive_relation

所以,简而言之,是的。

--- 由于评论而添加信息 ---

如果你去阅读有关 IComparer 的文档:http://msdn.microsoft.com/en-us/library/system.collections.icomparer.compare.aspx http://msdn.microsoft.com/en-us/library/system.collections.icomparer.compare.aspx

你会看到:

Compares two objects and returns a value indicating whether one is less than, 
equal to, or greater than the other.

换句话说,这意味着在比较对象“a”和“b”时,多次调用 Compare 方法应该始终得到相同的结果。如果不是这种情况,则意味着您将得到未定义的行为,并且不可能依赖该函数进行任何排序或比较。

因此,当您正确实现此方法时,传递性规则适用,您可以毫无疑问地说 a == c。

我希望澄清您对实施问题的疑问。

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

C# IComparer 标准用法问题 的相关文章

  • 从 Makefile 中的 C++FLAGS 中删除一个标志?

    我有一个 Makefile 其中包含另一个设置了很多默认值的 makefile 我无法编辑包含的 makefile 并且我想更改 makefile 中 C FLAGS 的值 即使它是在包含的 makefile 中设置的 具体来说 每当 de
  • 在 JavaScript 中引用 C# 变量

    我已经阅读了很多线程 但我不明白为什么这不起作用 我正在创建一个将用作导航栏的 SharePoint Web 部件 一切都很顺利 直到我尝试在 JS 代码中引用 C 变量 这是来自 VisualWebPart1UserControl asc
  • 使用 C#.net 中的私有存储库的身份验证读取 BitBucket API

    我已经尝试了几天让 BitBucket API 为我工作 但是当涉及到让它为具有身份验证的私有存储库工作时 将问题设置为私有 当它们设置为公开 无需身份验证 一切正常 代码示例如下 static void Main string args
  • 检查数据库中是否存在记录

    我正在使用这些代码行来检查记录是否存在 SqlCommand check User Name new SqlCommand SELECT FROM Table WHERE user txtBox UserName Text conn int
  • 为什么模板类的静态成员不唯一

    看一下下面的代码 include
  • ASP.NET 如何在 Web API 中读取多部分表单数据?

    我将多部分表单数据发送到我的 Web API 如下所示 string example my string HttpContent stringContent new StringContent example HttpContent fil
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 公共基类打破了元组的空基类优化

    gcc 4 7 1 对元组进行空基类优化 我认为这是一个非常有用的功能 然而 这似乎有一个意想不到的限制 include
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • 是否可以在对Where 的调用中调用命名方法?

    我试图从 RedGate 的这本免费电子书中了解 Linq 的一些性能影响ftp support red gate com ebooks under the hood of net memory management part1 pdf f
  • 为什么 std::atomic 比 volatile bool 慢很多?

    多年来我一直使用 volatile bool 来控制线程执行 并且效果很好 in my class declaration volatile bool stop In the thread function while stop do th
  • 使用 C# 的异步 WebRequest

    您好 我有一个函数 它将 url Get 参数传递到网络服务器上的 php 文件 并等待文件的响应 通常需要 10 20 秒 我想将其放入一个循环中 因为我必须一次将这些 Get 请求发送到大约 5 个不同的 php 文件 但是当我尝试将其
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • 从 cin 读取整数序列并将它们存储在向量中

    这就是我读取整数的方法std cin并将它们存储在向量中 int number vector
  • 如何在RcppParallel中调用用户定义的函数?

    受到文章的启发http gallery rcpp org articles parallel distance matrix http gallery rcpp org articles parallel distance matrix 我
  • 来自用户定义文字的整数字符序列,以字符串作为参数

    目前 只有双精度数可以在用户定义的文字中生成字符模板 template
  • 提升shared_from_this<>()

    有人可以用几句话概括一下如何提升shared from this lt gt 应该使用智能指针 特别是从使用绑定函数在 io service 中注册处理程序的角度来看 编辑 一些回复要求提供更多背景信息 基本上 我正在寻找 陷阱 即人们使用
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js

随机推荐

  • 在 Mac OS 上使用 OpenMP 和 C++11

    我正在尝试在我的 C 11 代码中使用一些 OpenMP 多线程功能 例如 pragma omp parallel for 当我尝试使用以下命令进行编译时 clang std c 11 stdlib libc fopenmp main cp
  • 使用 Django 的 ORM 加速批量插入?

    我计划使用 django 的 ORM 将从约 750 个文件 每个约 250MB 中获取的 10 亿条记录上传到数据库 目前每个文件需要大约 20 分钟来处理 我想知道是否有任何方法可以加速这个过程 我采取了以下措施 使用 transact
  • LINQ 语句比“foreach”循环更快吗?

    我正在编写一个网格渲染管理器 并认为将使用相同着色器的所有网格进行分组 然后在我处于该着色器通道中时渲染它们是一个好主意 我目前正在使用foreach循环 但想知道使用 LINQ 是否可以提高性能 为什么 LINQ 应该更快 它还在内部使用
  • 如何获取 ember 应用程序控制器中模板复选框的值

    我正在尝试查找控制器中是否选中了该复选框 这是我的模板 这是我的控制器 App Ember Application create App ApplicationController Ember Controller extend
  • PyQT 线程的最简单方法

    我在 PyQt 中有一个带有函数的 GUIaddImage image path 很容易想象 当需要将新图像添加到 QListWidget 中时会调用它 为了检测文件夹中的新图像 我使用threading Thread with watch
  • 如何使用 JSF 设置 HTTP 状态代码?

    我在 WebSphere Application Server 上使用 Apache Myfaces 2 2 我有一个 JSF 页面 它 测试 与文件系统和数据库的连接 当连接失败时 我想返回另一个HTTP状态代码 我怎样才能用 JSF 做
  • 按二级键对多维数组进行排序

    我有一个看起来像这样的数组 array 3 Fall Quarter 2012 gt array 2 20121018 gt array 1 agenda gt string 55 Fall 2012 Agenda 20121018 pdf
  • 无法让 ZClip 工作

    我知道它甚至在这个网站上也能工作 但只有当我通过 h1 元素触发它时 我需要通过图像 代表副本 触发它 但当我尝试时它根本不起作用 这是我的 JavaScript copyTxt click function alert Txt2Copy
  • 在 Java Card 上将 byte[] 转换为 Short[] 的快速方法

    我想在 Java 卡上优化 SHA 3 算法 我需要一种消耗更少内存的快速算法 可以轻松转换byte to short 或短 to byte 我当前的实现如下所示 private short byteToShort byte b int l
  • 表达 3.0 如何使用 app.locals.use 和 res.locals.use

    我在express3 0rc2上 如何使用app locals use 它还存在吗 和res locals use 我看到了这个https github com visionmedia express issues 1131 https g
  • 为什么 Range 有效,而 Cells 无效?

    我试图通过将一个范围内的值分配给另一个范围来将一些数据从一个工作簿移动到另一个工作簿中 当我使用正常的 Range 语法指定目标范围 Range A1 B2 时 我的代码可以工作 但是如果我尝试使用 Range Cells 语法 Range
  • 响应式视频播放器

    我需要一个使用 bootstrap 开发的响应式布局网站的视频播放器 这意味着当我重新调整屏幕大小或在不同尺寸的屏幕中查看页面时 播放器应该自动适合屏幕 我尝试过 jwplayer 和 flowplayer 但没有成功 http www l
  • 串行或并行调用多个ajax请求

    我有3个功能 load graphs national container natl rates container natl counts load graphs division Western container west rates
  • 添加 UIFont 并查找字体系列会因 EXC_BAD_ACCESS 崩溃

    我的问题是 当我添加描述的字体时here https stackoverflow com questions 3350131 how to add new font to xcode 3 2当我想检索字体系列名称时 UIFont famil
  • .NET Core 模板的 Markdown 语法是什么

    我有一个 NET Core 模板 https github com cilerler burcin blob master dist template config template json想知道如何根据设置的标志隐藏 markdown
  • XML 元素是否有标准的命名约定? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 XML 文档是否有任何标准 事实上的标准或其他标准 例如 哪种是编写标签的 最佳 方式
  • Java 中受保护的访问修饰符

    我在理解java中的受保护访问修饰符 或其背后的设计 时遇到了一些困难 我认为这意味着包访问和通过继承包含抽象成员的类的对象进行访问 我编写了以下示例代码 我发现如果未注释 注释掉的行会产生编译错误 为什么我可以通过 Second 中的 S
  • 是否可以在应用程序组件上使用 [ngClass],其中该类位于 Angular 6 的组件内部?

    我有一个 Angular 6 应用程序 我正在尝试将另一个 CSS 类应用到我的应用程序组件之一app component html文件 基本上 我想根据条件更改应用程序页脚的颜色 而所有其他情况都不显示页脚 所以 我的代码如下所示 应用程
  • 我的 Visual Studio 项目是 Web 应用程序还是网站?

    首先 什么时候使用什么以及它们之间的总体差异之前已经回答过 但我找不到这个问题的答案 在哪里可以检查我的 Visual Studio 项目是 Web 应用程序还是网站 区分网站和 Web 应用程序的最简单方法是查看项目的图标 Web Sit
  • C# IComparer 标准用法问题

    我有一个问题 这是否是在 C 中使用 IComparer 的标准 假设我有一个情况 其中有三个 Person 对象 P1 P2 和 P3 假设我调用 Compare 方法并传入 P1 和 P2 结果为 0 这本质上意味着两个人应该被归类为相