Ich habe viele Entitäten mit der Eigenschaft IsActive
. Aus internen Gründen müssen alle diese Felder nullfähig sein. Auf der anderen Seite muss ich für jede Entität einen doppelten Test an mehreren Stellen in der Anwendung durchführen:
(null wird als wahr behandelt)
%Vor%Wenn ich eine Methode wie
erstelle %Vor%Es wird immer noch nicht die Eigenschaft verstecken (zumindest von innerhalb der Klasse), so ist es fehleranfällig.
Ich habe versucht, eine Möglichkeit zum Überschreiben zu finden, aber natürlich kann ich den Rückgabetyp nicht in plain bool
ändern.
Was würden Sie tun, um in diesem Fall Redundanz zu vermeiden?
Verwenden Sie die Methode GetValueOrDefault
und geben Sie den Wert an, der anstelle von null
:
HINWEIS:
Ob die CLR-Methode ( GetValueOrDefault
) oder der Sprachoperator ( ??
in C #, If(,)
in VB) für das Ergebnis keine Rolle spielt, ist lediglich eine Frage der Code-Konsistenz. Persönlich verwende ich den Sprachoperator an Stellen, an denen ich nullable Werttypen und Strings auf die gleiche Weise behandeln kann, aber die CLR-Methode an Stellen, an denen ich genau betonen möchte, was mit dem Nullable-Wert passiert.
Sie können den Nullkoaleszenzoperator verwenden, damit Ihr Beispiel folgendermaßen aussieht:
%Vor%Gute Antworten wurden gegeben, ich würde vielleicht ein
machen %Vor%in einer statischen Hilfsklasse.
Warum verstecken Sie dieses Implementierungsdetail nicht einfach im Getter:
%Vor%EDIT: Nach der Realisierung werden die Eigenschaften generiert und können nicht geändert werden
Sie könnten einen neuen Typ namens ThreeValBool deklarieren, bei dem es sich im Wesentlichen um ein bool? handelt, und eine implizite Umwandlung von bool hinzufügen, beispielsweise:
%Vor%Offensichtlich müssen Sie einen Weg hinzufügen, um den Wert festzulegen ...
Machen Sie Ihre Eigenschaften dieses Typs (hoffentlich lässt der Designer das tun).