Registros de C# 9.0: constructor y tipos de referencia que no aceptan valores NULL
Intenté solo un registro simple:
#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;
}
Recibo advertencias:
La propiedad que no admite valores NULL 'Name' no está inicializada. Considere declarar la propiedad como anulable.
(igual para todos los campos excepto IdCategoría)
Básicamente, si lo entiendo correctamente, el compilador no genera automáticamente un constructor que acepta y establece todos los campos y (cuando lo uso #nullable enable
) tengo que escribirlo yo mismo, es decir:
public Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) {
this.Name=Name;
this.CategoryId=CategoryId;
...
}
Mi pregunta es, ¿es esto correcto? Estoy muy sorprendido por esto, ya que pensé que el objetivo principal era hacer que la creación de registros como ese fuera realmente simple, y tener que escribir/mantener el constructor es muy tedioso, especialmente en registros grandes que cambian con frecuencia. ¿O me estoy perdiendo algo aquí?
Respuestas
Parece que espera el Constructor primario generado automáticamente , pero se genera automáticamente (y en general obtiene todos los beneficios de registro) cuando utiliza los parámetros de registro en la declaración de tipo de registro , que se asignan automáticamente a público gety initpropiedades y inicializado automáticamente desde el constructor principal, eliminando así la advertencia de NRT.
Lo que significa que obtiene todo el tipo de registro de azúcar básicamente usando la sintaxis normal del constructor con la record
palabra clave agregada:
public record Product(string Name, int CategoryId, string Phone, Address Address, Manager Manager) { }