Ich habe diese Funktion in einem Projekt mit DTO-Klassen (Data Transfer Object) aktiviert, wie unten angegeben:
public class Connection
{
public string ServiceUrl { get; set; }
public string? UserName { get; set; }
public string? Password { get; set; }
//... others
}
Aber ich bekomme den Fehler:
CS8618
: Die nicht nullbare Eigenschaft 'ServiceUrl' ist nicht initialisiert. Erwägen Sie, die Eigenschaft als nullbar zu deklarieren.
Dies ist eine DTO-Klasse, daher initialisiere ich die Eigenschaften nicht. Dies liegt in der Verantwortung des Codes, der die Klasse initialisiert, um sicherzustellen, dass die Eigenschaften nicht null sind.
Der Anrufer kann beispielsweise Folgendes tun:
var connection = new Connection
{
ServiceUrl=some_value,
//...
}
Meine Frage: Wie gehe ich mit solchen Fehlern in DTO-Klassen um, wenn der Nullfähigkeitskontext von C # 8 aktiviert ist?
Plain Old C# Object
. Nur ein Objekt wie jedes andere, ohne von einer speziellen Klasse zu erben. Ich vermute, Sie haben eine andere Frage. So erstellen Sie DTOs -Data Transfer Objects
This should be the responsibility of the one initializing the class to ensure that the properties are non-null
Die Klasse sollte immer in einem gültigen Zustand sein. Wenn dies null
nicht zulässig ist, sollte die Eigenschaft niemals null sein. Vielleicht sollten Sie anstelle einer einfachen Zeichenfolge eine spezielle Klasse für die URL verwenden, die den Wert None
oder "Missing" haben kann, wie die Option-Klasse in F #. Mit C # 8 können Sie solche Klassen schreiben und sie mit Mustervergleich überprüfen
public string ServiceUrl { get; set; } = default! ;
. Ich hoffe, dass Roslyn in Zukunft eine Möglichkeit hat, die späte Initialisierung außerhalb des Bereichs von ctor zu handhaben. Ich habe MayBe <T> (wie die Optionsklasse) verwendet, aber für den neuen Code in c # 8 auf nullable Reference Type umgestellt.