Игнорирование определенных полей при использовании «с» в записи C# 9?C#

Место общения программистов C#
Ответить
Anonymous
 Игнорирование определенных полей при использовании «с» в записи C# 9?

Сообщение Anonymous »

При создании нового экземпляра записи C# 9 с использованием ключевого слова with я хотел бы игнорировать некоторые поля вместо того, чтобы копировать их в новый экземпляр.В следующем примере у меня есть свойство Hash. Поскольку вычисления требуют очень больших затрат, они вычисляются только при необходимости, а затем кэшируются (у меня есть глубоко неизменяемая запись, так что хэш никогда не изменится для экземпляра).

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

public record MyRecord {

// All truely immutable properties
public int ThisAndManyMoreComplicatedProperties { get; init; }
// ...

// Compute only when required, but then cache it
public string Hash {
get {
if (hash == null)
hash = ComputeHash();
return hash;
}
}

private string? hash = null;
}
При вызове

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

MyRecord myRecord = ...;
var changedRecord = myRecord with { AnyProp = ... };

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

changedRecord
содержит значение хэша из myRecord, но я хочу снова иметь значение по умолчанию, нулевое.
Любой шанс отметьте поле хэша как «переходное»/«внутреннее»/«действительно личное»… или мне придется написать свой собственный конструктор копирования, чтобы имитировать эту функцию?

Подробнее здесь: https://stackoverflow.com/questions/661 ... p-9-record
Ответить

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

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

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

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

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