9.0 记录如何实现对象属性(如数组)的基于值的相等性?
我注意到,尽管所有字节都相同,但具有时间戳属性(字节数组)的两个相同类型的记录对象不被识别为相等。
例子:
public record C
{
public byte[] Timestamp {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
将实现为
public virtual bool Equals(C other)
{
return (...) && EqualityComparer<byte[]>.Default.Equals(<Timestamp>k__BackingField, other.<Timestamp>k__BackingField);
}
Run Code Online (Sandbox Code Playgroud)
它使用不使用 SequenceEquals 的 EqualityComparer 因此结果是具有相同内容的两个记录不相等。
using System.Collections.Generic;
using System.Diagnostics;
var a = new byte[1] { 1 };
var b = new byte[1] { 1 };
var isEqual = EqualityComparer<byte[]>.Default.Equals(a, b);
Debug.Print(isEqual.ToString()); // false
Run Code Online (Sandbox Code Playgroud)
我认为记录会为每个属性实现基于值的平等,但这显然仍然是基于数组的引用。我是在错误的轨道上还是就这样?