C# - Prüfen ob integer-Eigenschaft festgelegt ist
Ich bin Validierung einige Eigenschaften und ich muss wissen, ob long oder integer-Werte sind, die von anderen Schichten.
Beispielsweise dieser Klasse::
public class Person
{
public int Age {get;set;}
}
Wenn ich eine neue Instanz von Person, die Alter bekommt den Wert 0. Aber ich habe, um zu überprüfen, ob die Alter wurden eingestellt, weil die Alter null werden kann (nicht in diesem Kontext natürlich).
Einer Lösung, habe ich gedacht, ist die Verwendung der int als nullable-integer (public int? Alter) und im Konstruktor von Person die Age als null.
Aber ich versuche es zu vermeiden, weil ich hätte zu ändern, zu viele Klassen, nur um zu überprüfen, ob Alter.HasValue und verwenden Sie es als Alter.Wert.
Irgendwelche Vorschläge?
- initialisieren auf -1?
- Die Tatsache, die Sie ändern müssen viele Klassen ist ein schwaches argument, als mögliche Lösung wird mit beträchtlichen ändern.
- Es klingt wie Sie möchten, dass Ihre Wert-Typen, um eine zusätzliche "nullable" - Zustand. Die, natürlich, ist genau das, was
int?
ist für.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Int ' s sind standardmäßig initialisiert auf 0; solange Sie nicht verwenden möchten
int?
die perfekt funktionieren würde für Sie. Sie können überprüfen, gegen, dass, oder Sie können eine Flagge und ein Feld sichern:Wie oben vorgeschlagen, können Sie initialisieren ein Ungültiger Status:
Oder nur brechen, und verwenden Sie einen
int?
Für rückwärts-Kompatibilität mit Ihrem code, können Sie aus einer
int?
ohne dass es:Gibt es keine Unterschied zwischen einem Feld (oder automatisch implementierte Eigenschaft), wurde explizit auf seinen Standardwert festgelegt, und eine, die nie gesetzt wurden.
Einen
Nullable<int>
ist definitiv der Weg zu gehen hier, aber Sie müssen berücksichtigen, die sauberste API zu verwenden.Zum Beispiel möchten Sie vielleicht:
Erlauben, Sie zu Lesen
Age
direkt in Orten, die übernehmen es ja - aber-test für Sie, wenn Sie wollen, vorsichtig zu sein.Welchem Muster auch immer Sie verwenden, Sie haben ein "gesetzt ist" - Abfrage, bevor du den Wert, so...
Verwenden Sie eine null-Feld
int? age
die Ihre get - /set-Eigenschaften, Verwendung und Abfrage einerIsAgeSet
Eigenschaft: