C # - Überprüfen Sie, ob die Ganzzahleigenschaft gesetzt ist

7

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?

    
Guilherme Cardoso 10.05.2011, 16:53
quelle

3 Antworten

19

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:

%Vor%

Wie oben vorgeschlagen, können Sie es in einen ungültigen Zustand initialisieren:

%Vor%

Oder brechen Sie einfach ab und verwenden Sie int?

%Vor%

Um eine Rückwärtskompatibilität mit Ihrem Code zu gewährleisten, können Sie ihn mit int? zurückhalten, ohne ihn anzuzeigen:

%Vor%     
Aren 10.05.2011, 16:56
quelle
5

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.

    
Jon Skeet 10.05.2011 16:58
quelle
1

Welches Muster Sie auch verwenden, Sie müssen eine "is set" -Abfrage haben, bevor Sie den Wert erhalten, also ...

Verwenden Sie ein Nullable-Feld int? age , das von Ihren get / set-Eigenschaften verwendet wird, und fragen Sie eine IsAgeSet -Eigenschaft ab:

%Vor%     
Neil Moss 10.05.2011 16:59
quelle

Tags und Links