提问人:Mike Nakis 提问时间:3/11/2023 最后编辑:Mike Nakis 更新时间:3/11/2023 访问量:140
替换 C# 记录结构的合成 Equals()
Replacing the synthesized Equals() of C# record struct
问:
总之:
有没有办法提供我自己的方法,而不是被编译器自动生成的方法所困扰?Equals( object? )
record struct
注意:
这个问题与替换自动生成的方法无关,这是微不足道的;这个问题是关于替换继承自 的方法,这是一个完全不同的故事。MyRecord.Equals( MyRecord )
MyRecord.Equals( Object? )
Object
背景:
如果我想覆盖普通的旧 和 ,我可以自由地这样做;但是,我不能用;IDE 显示“已声明具有相同签名的成员”,而编译器给出“错误 CS0111:类型'Color'已定义具有相同参数类型的名为'Equals'的成员”。Equals( object? )
class
struct
record
快速浏览一下 Microsoft 官方文档 这里 和 这里 说这是设计使然。
问题:
有谁知道任何解决方法?
(除了从不使用和丧失其所有便利性。record
答:
1赞
Guru Stron
3/11/2023
#1
有没有办法为记录结构提供我自己的“Equals(object?)”方法,而不是被编译器自动生成的方法所困扰?
不,事实并非如此,正如记录结构规范所说:
记录结构包括一个合成的重写,等效于声明如下的方法:
public override readonly bool Equals(object? obj);
如果显式声明重写,则为错误。
有谁知道任何解决方法?
您可以尝试使用像 Fody 这样的东西来研究一些汇编编织,但据我所知,这发生在编译之后,因此它不会涵盖所有可能的场景(即不适用于相同的汇编用法)。
就我个人而言,我会考虑转储该方法并尝试实现 Roslyn 分析器,它将处理您尝试解决的类型不匹配问题。
ObsoleteAttribute
评论
System.Obsolete
Obsolete
object.Equals