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

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

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

推荐答案

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

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

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

.net相关问答推荐

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

仅在有换行符时捕获分隔符之间的所有文本

为什么 GetShortestDayName 返回的名称比预期的短?

C#/.NET + VisualStudio,命名空间问题

在接口内部声明 IEnumerable 而在具体类中声明 IList

无法实例化类的代理:System.Net.HttpWebRequest.找不到无参数构造函数

如何为多种文件类型设置 FileSystemWatcher 过滤器?

将客户端证书添加到 .NET Core HttpClient

如何在 ASP.NET Core 中使用 Bootstrap 4

(C# 7.2)“私人保护”修饰符的用例是什么?

.NET 标准与 .NET Core

如何从 appsettings.json 中获取价值

yield 和 await 如何在 .NET 中实现控制流?

在 .NET Core 中在 MVC 之外使用 Razor

Resharper Ctrl-T 映射丢失

nameof 的目的是什么?

将 C# 编译为本机?

HttpClient 和使用代理 - 不断得到 407

Dapper 是否支持 SQL 2008 表值参数?

Microsoft.Bcl.Build NuGet 包有什么作用?