Eu ativei esse recurso em um projeto com classes de objeto de transferência de dados (DTO), conforme indicado abaixo:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Mas eu recebo o erro:
CS8618
: A propriedade não anulável 'ServiceUrl' não foi inicializada. Considere declarar a propriedade como anulável.
Esta é uma classe DTO, por isso não estou inicializando as propriedades. Isso será de responsabilidade do código que inicializou a classe para garantir que as propriedades sejam não nulas.
Por exemplo, o chamador pode fazer:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Minha pergunta: como lidar com esses erros nas classes DTO quando o contexto de nulidade do C # 8 está ativado?
Plain Old C# Object
. Apenas um objeto como outro qualquer, sem herdar de nenhuma classe especial. Eu suspeito que você tem uma pergunta diferente . Como criar DTOs -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
a classe deve estar sempre em um estado válido. Se null
não for permitido, a propriedade nunca deve ser nula. Talvez, em vez de uma string básica, você deva usar uma classe especializada para a URL que possa ter um valor de None
ou `Missing`, como a classe Option em F #. C # 8 permite que você escreva tais classes e verificá-los com correspondência de padrão
public string ServiceUrl { get; set; } = default! ;
. Espero que Roslyn possa ter no futuro uma maneira de lidar com a inicialização tardia fora do escopo do ctor. Eu estava usando MayBe <T> (como a classe Option), mas mudei para Tipo de referência anulável em c # 8 para o novo código.