Ich überprüfe einige Eigenschaften und ich muss wissen, ob lange oder ganzzahlige Werte von anderen Layern gesetzt werden.
Zum Beispiel diese Klasse ::
%Vor%Wenn ich eine neue Instanz von Person festlege, erhält das Alter den Wert 0. Ich muss jedoch überprüfen, ob das Alter festgelegt wurde , weil das Alter null sein kann (nicht in diesem Zusammenhang natürlich).
Eine Lösung, an die ich gedacht habe, ist, das int als Nullable Integer zu verwenden ( public int? Age ) und im Konstruktor von Person das Alter als festzulegen null.
Aber ich versuche es zu vermeiden, weil ich zu viele Klassen ändern müsste, nur um Age.HasValue zu überprüfen und um Age.Value zu verwenden.
Irgendwelche Vorschläge?
Int's sind standardmäßig auf 0 initialisiert; Angenommen, Sie möchten int?
nicht verwenden, was perfekt für Sie funktionieren würde. Sie können dies überprüfen oder Sie können ein Flag und ein Hintergrundfeld haben:
Wie oben vorgeschlagen, können Sie es in einen ungültigen Zustand initialisieren:
%Vor% Oder brechen Sie einfach ab und verwenden Sie int?
Um eine Rückwärtskompatibilität mit Ihrem Code zu gewährleisten, können Sie ihn mit int?
zurückhalten, ohne ihn anzuzeigen:
Es gibt einen no Unterschied zwischen einem Feld (oder einer automatisch implementierten Eigenschaft), dessen explizit auf seinen Standardwert gesetzt wurde, und einem Wert, der nie festgelegt wurde.
A Nullable<int>
ist definitiv der Weg, um hierher zu kommen - aber Sie müssen die sauberste API in Betracht ziehen.
Zum Beispiel möchten Sie vielleicht:
%Vor% Damit können Sie Age
direkt an Stellen lesen, an denen angenommen wird - aber testen Sie es, wenn Sie vorsichtig sein wollen.
Tags und Links c# properties