9.0 记录如何实现对象属性(如数组)的基于值的相等性?

Sve*_*ter 5 c# c#-9.0

9.0 记录如何实现对象属性(如数组)的基于值的相等性?

我注意到,尽管所有字节都相同,但具有时间戳属性(字节数组)的两个相同类型的记录对象不被识别为相等。

例子:

public record C 
{
   public byte[] Timestamp {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

https://sharplab.io/#v2:EYLgtghgzgLgpgJwDQBMQGoA+BYAUAAQGYACBOAYwHsEViBhYgbz2NeKOOAE94BtAXWIAVAJZg4sCGAAOTAOZwYAbmJRFSgL54NQA===

将实现为

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)

我认为记录会为每个属性实现基于值的平等,但这显然仍然是基于数组的引用。我是在错误的轨道上还是就这样?