提问人:Khodaie 提问时间:12/6/2022 最后编辑:M. JustinKhodaie 更新时间:11/7/2023 访问量:96
使用 Equals(object) 方法将 C# 记录与其他类型进行比较
Comparing C# records with other types using Equals(object) method
问:
在 C# 中,类型的虚拟方法由编译器自动生成。生成的方法如下所示:object.Equals(object?)
record
[IsReadOnly]
[CompilerGenerated]
public override bool Equals(object obj)
{
if (obj is MyRecord)
{
return Equals((MyRecord)obj);
}
return false;
}
但是,如果记录实现了其他接口呢:IEquatalbe<T>
public readonly record struct MyRecord : IEquatable<int>
{
// ....
public bool Equals(int other)
{
return Whatever();
}
}
在这种情况下,方法不考虑这些值,并且使用 不能正常工作(如 FluentAssertions):int
Equals(object?)
Equals(object?)
myRecord.Should().Be(4); // will never pass
是否有任何解决方案可以自定义类型的方法?Equals(object?)
record
我试图重写记录中的方法,但编译器生成了一个错误:Equals(object)
Error CS0111: Type 'MyRecord' already defines a member called 'Equals' with the same parameter types
答: 暂无答案
评论
IEquatable<int>
IEquatbale<MyRecord>
IEquatable<T>
x.Equals(y)
y.Equals(x)