Как 9.0 Record реализует равенство на основе стоимости для свойств объекта (например, массивы)?C#

Место общения программистов C#
Ответить
Anonymous
 Как 9.0 Record реализует равенство на основе стоимости для свойств объекта (например, массивы)?

Сообщение Anonymous »

Как 9.0 Запись реализует равенство на основе значений для свойств объекта (например, массивы)? < /p>
Я заметил, что два объекта записи того же типа имеют свойство временного метки, которое является массивом байтов, не распознаются как равные, несмотря на все байты, где одинаковые.

Код: Выделить всё

public record C
{
public byte[] Timestamp {get; set;}
}
https://sharplab.io/#v2:eylgtghgzglgpgj ... jrfsgl54nq /> будет реализован как < /p>
public virtual bool Equals(C other)
{
return (...) && EqualityComparer.Default.Equals(k__BackingField, other.k__BackingField);
}
< /code>
Использует EqualityComprer, который не использует SequenceEdavals, поэтому результат заключается в том, что две записи с одинаковым содержанием не равны. < /p>
using System.Collections.Generic;
using System.Diagnostics;

var a = new byte[1] { 1 };
var b = new byte[1] { 1 };

var isEqual = EqualityComparer.Default.Equals(a, b);

Debug.Print(isEqual.ToString()); // false
< /code>
Я думал, что записи будут реализовать равенство на основе стоимости для каждого свойства, но это, очевидно, по -прежнему основано на основе массивов, в частности. Я не на том пути или это так?

Подробнее здесь: https://stackoverflow.com/questions/649 ... s-like-arr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»