J'ai activé cette fonctionnalité dans un projet ayant des classes d'objets de transfert de données (DTO), comme indiqué ci-dessous:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Mais je reçois l'erreur:
CS8618
: La propriété non nullable 'ServiceUrl' n'est pas initialisée. Envisagez de déclarer la propriété comme nullable.
Ceci est une classe DTO, donc je n'initialise pas les propriétés. Ce sera la responsabilité du code initialisant la classe pour s'assurer que les propriétés ne sont pas nulles.
Par exemple, l'appelant peut faire:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Ma question: comment gérer ces erreurs dans les classes DTO lorsque le contexte de nullité C # 8 est activé?
Plain Old C# Object
. Juste un objet comme un autre, sans hériter d'aucune classe spéciale. Je soupçonne que vous avez une question différente . Comment créer des 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 doit toujours être dans un état valide. Si ce null
n'est pas autorisé, la propriété ne doit jamais être nulle. Peut-être, au lieu d'une chaîne de base, vous devriez utiliser une classe spécialisée pour l'URL qui peut avoir une valeur de None
ou «manquant», comme la classe Option en F #. C # 8 vous permet d'écrire de telles classes et de les vérifier avec la correspondance de motifs
public string ServiceUrl { get; set; } = default! ;
. J'espère que Roslyn aura à l'avenir un moyen de gérer l'initialisation tardive en dehors du champ d'application de ctor. J'utilisais MayBe <T> (comme la classe Option), mais je suis passé au type de référence nullable en c # 8 pour le nouveau code.