Почему поле не инициализируется при использовании пользовательского конструктора копирования записи?C#

Место общения программистов C#
Ответить
Anonymous
 Почему поле не инициализируется при использовании пользовательского конструктора копирования записи?

Сообщение Anonymous »

У меня есть эта запись :
record Foo {
string _bar = "initialized";
public string Bar => _bar;
}
< /code>
Я запускаю следующий код: < /p>
var foo = new Foo();
Console.WriteLine(foo?.Bar ?? "null");
var foo2 = foo with { };
Console.WriteLine(foo2?.Bar ?? "null");
< /code>
Это будет создавать: < /p>
initialized
initialized
< /code>
Однако, если мне нужна какая -то пользовательская логика клонирования, которую я реализую в конструкторе копирования: < /p>
protected Foo(Foo other) {
Console.WriteLine("---my cloning method---");
}
< /code>
повторно заработать код тестирования показывает: < /p>
initialized
---my cloning method---
null
< /code>
Таким образом, он выглядит так, как будто код инициализации поля не выполняется для моего конструктора копирования. Почему этого здесь не происходит?

Подробнее здесь: https://stackoverflow.com/questions/796 ... onstructor
Ответить

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

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

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

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

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