Записи C# 9.0 - ссылочные типы и конструктор, не допускающие значения NULL
Я пробовал простую запись:
#nullable enable
public record Product
{
public readonly string Name;
public readonly int CategoryId;
public readonly string Phone;
public readonly Address Address;
public readonly Manager Manager;
}
Я получаю предупреждения:
Свойство Name, не допускающее значения NULL, не инициализировано. Рассмотрите возможность объявления свойства как допускающего значение NULL.
... то же самое для всех полей, кроме CategoryId
В основном, если я правильно понимаю, конструктор, принимающий и устанавливающий все поля, не генерируется автоматически компилятором и (при использовании#nullable enable
) Я должен написать это сам, т.е.
public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
this.Name=Name;
this.CategoryId=CategoryId;
...
}
Мой вопрос, это правильно? Я очень удивлен этим, так как я думал, что все дело в том, чтобы сделать создание таких записей действительно простым, а необходимость писать / поддерживать ctor очень утомительна, особенно для больших записей, которые часто меняются. Или мне что-то здесь не хватает?
1 ответ
Кажется, вы ожидаете автоматически сгенерированного первичного конструктора, но он автоматически создается (и в целом вы получаете все преимущества записи), когда вы используете параметры записи в объявлении типа записи, которые автоматически сопоставляются с общедоступнымиget
а также init
properties и автоматически инициализируется из основного конструктора, что устраняет предупреждение NRT.
Это означает, что вы получаете весь сахар типа записи, в основном используя синтаксис обычного конструктора с добавленным record
ключевое слово:
public record Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) { }