записи в C# 9.0 и допускающие значения NULL
Я пробую новые функции записи, используя последнюю версию.Net5
public record Rec {
public string Name;
public int Id;
//public Rec(string name, int id) => (Name, Id) = (name, id);
}
я получил
предупреждение CS8618: поле "Имя", не допускающее значения NULL, не инициализировано. Рассмотрите возможность объявления поля как допускающего значение NULL.
Значит, конструктор не создается, а я понял, что это особенность записей?
и почему не такое же предупреждение дляId
?
Если я не отмечу ctor выше, предупреждение исчезнет (что имеет смысл)
Также, если я это сделаю:
public record Rec(string Name, int Id);
Предупреждений нет.
РЕДАКТИРОВАТЬ
поэтому кажется, что две формы создания записи (более длинный и более короткий синтаксис) различаются, короткая версия делает поля общедоступными, а также добавляет ctor, тогда как первая - нет. Я не могу найти ссылку на это.
1 ответ
Значит, конструктор не создается, а я понял, что это особенность записей?
Согласно документации: Первичный конструктор синтезируется для всех параметров значений списка параметров для позиционной записи.
В вашем первом примере нет списка параметров и, следовательно, параметров значений, поэтому он не является позиционной записью и, следовательно, не имеет первичного конструктора.
и почему не такое же предупреждение для
Id
?
Поскольку конструктор по умолчанию дляint
есть и всегда было 0
не null
. Это не совсем конкретно дляrecord
s, так было всегда, еще до C# 1.0.