Activé esta función en un proyecto que tiene clases de objetos de transferencia de datos (DTO), como se indica a continuación:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Pero me sale el error:
CS8618
: La propiedad no anulable 'ServiceUrl' no está inicializada. Considere declarar la propiedad como anulable.
Esta es una clase DTO, por lo que no estoy inicializando las propiedades. Esto será responsabilidad del código que inicializa la clase para garantizar que las propiedades no sean nulas.
Por ejemplo, la persona que llama puede hacer:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Mi pregunta: ¿Cómo manejar tales errores en las clases DTO cuando el contexto de nulabilidad de C # 8 está habilitado?
Plain Old C# Object
. Solo un objeto como cualquier otro, sin heredar de ninguna clase especial. Sospecho que tienes una pregunta diferente . Cómo crear DTOs -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
la clase debe estar en un estado válido siempre. Si null
no está permitido, la propiedad nunca debe ser nula. Tal vez, en lugar de una cadena básica, debería usar una clase especializada para la URL que pueda tener un valor de None
'Falta', como la clase Opción en F #. C # 8 le permite escribir tales clases y verificarlas con coincidencia de patrones
public string ServiceUrl { get; set; } = default! ;
. Espero que Roslyn pueda tener en el futuro una forma de manejar la inicialización tardía fuera del alcance de ctor. Estaba usando MayBe <T> (como la clase Opción), pero cambié a Tipo de referencia anulable en c # 8 para el nuevo código.