Ich habe ein DTO, das durch Lesen aus einer DynamoDB-Tabelle gefüllt wird. Angenommen, es sieht derzeit so aus:
public class Item
{
public string Id { get; set; } // PK so technically cannot be null
public string Name { get; set; } // validation to prevent nulls but this doesn't stop database hacks
public string Description { get; set; } // can be null
}
Gibt es bewährte Verfahren, um damit umzugehen? Ich würde lieber einen nicht parameterlosen Konstruktor vermeiden, da dies mit dem ORM im Dynamo SDK (und anderen) schlecht funktioniert.
Es scheint mir seltsam zu schreiben, public string Id { get; set; } = "";
weil dies niemals passieren wird , da Id
es sich um eine PK handelt und niemals null sein kann. Was würde ""
es nützen , selbst wenn es irgendwie wäre?
Also eine Best Practice dazu?
- Sollte ich sie alle markieren, um
string?
zu sagen, dass sie null sein können, obwohl einige es niemals sein sollten. - Soll ich initialisieren
Id
undName
mit ,""
weil sie sollte nie sogar null und zeigt dies die Absicht sein , obwohl""
nie verwendet werden. - Eine Kombination von oben
Bitte beachten Sie: Hierbei handelt es sich um nullbare C # 8- Referenztypen. Wenn Sie nicht wissen, welche am besten geeignet sind, antworten Sie nicht.
= ""
können Sie = null!
eine Eigenschaft initialisieren, von der Sie wissen, dass sie niemals effektiv sein wird null
(wenn der Compiler keine Möglichkeit hat, dies zu wissen). Wenn Description
es legal sein kann null
, sollte es als a deklariert werden string?
. Wenn die Überprüfung der Nullfähigkeit für das DTO eher störend als hilfreich ist, können Sie den Typ alternativ einfach in #nullable disable
/ #nullable restore
umbrechen, um NRTs nur für diesen Typ zu deaktivieren.
#pragma warning disable CS8618
oben in die Datei klatschen.