.NET 6中为record类型自定义Equals方法
作者:MyIO 时间:2023-07-15 21:29:29
前言:
record类型,这是一种新引用类型,而不是类或结构。record与类不同,区别在于record类型使用基于值的相等性。
例如:
public record DemoRecord(int id);
public class DemoClass
{
public DemoClass(int id)
{
this.id = id;
}
public int id { get; }
}
但是,当record类型中的属性是引用类型时,相等性就失效了。
例如:
public record A(int[] ids);
一、重写Equals方法
首先想到的解决方法是像类一样重写Equals方法:
public class DemoClass
{
public override bool Equals(object obj)
{
if (obj == null || obj is not DemoClass demoClass)
{
return false;
}
return id.Equals(demoClass.id);
}
}
但是发现record类型居然不提供重写Equals方法的能力
二、自定义Equals方法
反编译示例代码,发现编译器确实为record类型生成了虚拟的Equals方法:
public virtual bool Equals(A other)
{
return this == other || (other != null && this.EqualityContract == other.EqualityContract && EqualityComparer<int[]>.Default.Equals(this.<ids>k__BackingField, other.<ids>k__BackingField));
}
但是,如果手写override方法,编译报错
如果不加override,编译也报错:
但是,根据“必须允许替代”这个错误提示,我们加上了virtual方法,居然成功了:
public record B(int[] ids)
{
public virtual bool Equals(B b)
{
if (b is null) return false;
return ids.SequenceEqual(b.ids);
}
}
而且反编译示例代码,发现编译器没有再为record
类型自动生成虚拟的Equals
方法。
三、结论
如果要为record类型自定义Equals方法,必须定义virtual方法。
来源:https://blog.51cto.com/MyIO/5100083
标签:record,自定义,Equals,方法,NET6
0
投稿
猜你喜欢
Django中间件工作流程及写法实例代码
2021-09-01 17:47:38
python SSH模块登录,远程机执行shell命令实例解析
2022-07-24 21:09:22
Go语言hello world实例
2024-04-26 17:21:32
MySQL大小写敏感导致的问题分析
2024-01-17 05:41:12
在Recordset对象中查询记录的方法
2008-11-20 16:51:00
Django如何实现内容缓存示例详解
2022-02-23 15:33:01
在SUSE10环境下安装和配置MySQL数据库
2008-12-17 15:03:00
overflow的另类用法
2008-07-02 12:29:00
微信小程序wx.request拦截 器使用详解
2023-07-22 09:11:55
Python 自动化处理Excel和Word实现自动办公
2021-06-07 06:41:16
针对google Chrome的 CSS hacks
2009-11-30 12:45:00
使用html+js+css 实现页面轮播图效果(实例讲解)
2024-02-24 01:48:44
Python实现常见数据格式转换的方法详解
2023-04-16 03:48:16
ACCESS模糊查询出现"内存溢出"
2009-08-13 14:25:00
python编程使用协程并发的优缺点
2023-07-20 12:11:45
python实现12306登录并保存cookie的方法示例
2021-08-05 18:37:55
Python栈算法的实现与简单应用示例
2023-11-16 23:18:30
ShardingSphere数据库读写分离算法及测试示例详解
2024-01-19 06:21:09
Vue.js中的图片引用路径的方式
2024-05-09 15:28:10
论坛首页效果图设计
2009-03-19 13:46:00