我希望我的Food类能够在与另一个Food实例相等时进行测试.稍后我将对一个列表使用它,我想使用它的List.Contains()方法.我应该执行IEquatable<Food>还是只覆盖Object.Equals()?来自MSDN:

此方法通过以下方式确定等式:

所以我的下一个问题是:函数的哪些函数/类.NET框架使用Object.Equals()?我应该首先使用它吗?

推荐答案

主要原因是性能.当仿制药被引入美国时.NET2.0他们能够添加一系列整洁的类,比如List<T>Dictionary<K,V>HashSet<T>等.这些 struct 大量使用GetHashCodeEquals.但对于值类型,这需要装箱.IEquatable<T>允许 struct 实现强类型Equals方法,因此不需要装箱.因此,在将值类型与泛型集合一起使用时,性能会更好.

引用类型受益不大,但IEquatable<T>实现确实让您避免了System.Object的强制转换,如果它被频繁调用,这可能会有所不同.

但是,正如Jared Parson's blog所指出的,您must仍然实现标准Object.EqualsObject.GetHashcode覆盖.

.net相关问答推荐

为什么在WinForm应用程序中创建组件类椭圆会在www.example.com中没有响应

C#:如何构造异步/等待代码,其中许多请求是针对相同的、返回缓慢的数据发出的,这可以满足所有请求

信号量的多线程问题

当 Func 委托需要接口作为参数时,它是如何工作的?

MongoDB C# 驱动程序 - 忽略绑定字段

RNGCryptoServiceProvider 的优缺点

在 Moq Callback() 调用中设置变量值

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

C# 相当于 Java 的 <?在泛型中扩展 Base>

为什么 .NET 中不需要 Maven?

向 .NET 应用程序添加脚本功能

有没有办法从方法返回匿名类型?

将 StreamReader 返回到开头

加载程序集、查找类和调用 Run() 方法的正确方法

如何在 nuspec 中指定特定的依赖版本?

如何向 C# Winforms 中的标签添加提示或工具提示?

如何在 C# 中使用迭代器反向读取文本文件

将控制台输出镜像到文件

记录器包装器最佳实践

.NET 桌面应用程序中的 Settings.settings 与 app.config