Код: Выделить всё
var a = new Foo([new(1), new(2), new(3)]);
Console.WriteLine(a.Sum); // Print 6
var b = a with
{
Items = [
a.Items[0] with { Value = 10},
a.Items[1],
a.Items[2],
],
};
Console.WriteLine(b.Sum); // Also print 6 (!)
record Item(int Value);
record Foo(ImmutableArray Items)
{
public int Sum { get; } = Items.Sum(item => item.Value);
}
После некоторого копания я обнаружил, что конструктор даже не вызывается оператором with, но как можно создать экземпляр без вызова конструктора?
Этот вопрос был закрыт, потому что это дубликат Record конструктор не вызывается при копировании с оператором with. Этот вопрос объясняет, почему мой конструктор не вызывается, но остается вопрос:
Не следует ли вызывать инициализатор свойства независимо от того, какой конструктор используется?
Подробнее здесь: https://stackoverflow.com/questions/798 ... using-with
Мобильная версия