Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 9.0 record如何实现对象属性(如数组)基于值的相等?_C#_C# 9.0 - Fatal编程技术网

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

C# 9.0 record如何实现对象属性(如数组)基于值的相等?,c#,c#-9.0,C#,C# 9.0,9.0 record如何实现对象属性(如数组)基于值的相等 我注意到,两个具有timestamp属性(即字节数组)的相同类型的记录对象不能被识别为相等,尽管所有字节都相同 例如: public record C { public byte[] Timestamp {get; set;} } 将作为 public virtual bool Equals(C other) { return (...) && EqualityComparer<byte[]&g

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

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

例如:

public record C 
{
   public byte[] Timestamp {get; set;}
}

将作为

public virtual bool Equals(C other)
{
    return (...) && EqualityComparer<byte[]>.Default.Equals(<Timestamp>k__BackingField, other.<Timestamp>k__BackingField);
}
公共虚拟布尔等于(C其他)
{
返回(…)&&EqualityComparer.Default.Equals(k_ubackingfield,其他.k_ubackingfield);
}
它使用EqualityComparer,而EqualityComparer不使用SequenceEquals,因此结果是具有相同内容的两条记录不相等

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
使用System.Collections.Generic;
使用系统诊断;
var a=新字节[1]{1};
var b=新字节[1]{1};
var isEqual=EqualityComparer.Default.Equals(a,b);
Debug.Print(isEqual.ToString());//假的

我原以为记录会实现每个属性基于值的相等,但对于数组来说,这显然仍然是基于引用的。我是走错了路还是就这样?

“我以为记录会支持每个属性基于值的相等”——我认为这是真正的问题,假设您的假设是规范的。特别是当您似乎非常清楚记录使用
EqualityComparer.Default.Equals()
来确定相等性时。@stackturtle如果您想向C#开发人员抱怨他们不喜欢他们设计功能的方式,那么就不适合这样做。他们不会看到这些,这里的人也不会对此采取任何行动。如果您愿意,可以直接向开发人员提供反馈。@stacktovert:Edgy。幸运的是,C只是C,所以您可以编写自己的、更好的代码@sven您可以查看Stephen Cleary的Nito Comparers库以获得更大的灵活性。Nito中提供了您在
记录中查找的功能。