Ho attivato questa funzione in un progetto con classi DTO (Data Transfer Object), come indicato di seguito:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Ma ottengo l'errore:
CS8618
: La proprietà non annullabile "ServiceUrl" non è inizializzata. Valuta di dichiarare la proprietà come nullable.
Questa è una classe DTO, quindi non sto inizializzando le proprietà. Questa sarà la responsabilità del codice che inizializza la classe per garantire che le proprietà siano non nulle.
Ad esempio, il chiamante può fare:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
La mia domanda: come gestire tali errori nelle classi DTO quando il contesto di nullability di C # 8 è abilitato?
Plain Old C# Object
. Solo un oggetto come un altro, senza ereditare da alcuna classe speciale. Sospetto che tu abbia una domanda diversa . Come creare DTO -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
la classe dovrebbe essere sempre in uno stato valido. Se null
non è consentito, la proprietà non dovrebbe mai essere nulla. Forse, invece di una stringa di base, dovresti usare una classe specializzata per l'URL che può avere un valore di None
o "Missing", come la classe Option in F #. C # 8 ti consente di scrivere tali classi e di controllarle con la corrispondenza dei modelli
public string ServiceUrl { get; set; } = default! ;
. Spero che Roslyn possa avere in futuro un modo per gestire l'inizializzazione tardiva al di fuori dell'ambito di ctor. Stavo usando MayBe <T> (come la classe Option), ma sono passato a Tipo di riferimento nullable in c # 8 per il nuovo codice.