Es wird vermieden, wiederholt nach Nullen mit denselben Eigenschaften zu suchen

7

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?

    
Mathieu 28.02.2012, 16:43
quelle

5 Antworten

13

Verwenden Sie die Methode GetValueOrDefault und geben Sie den Wert an, der anstelle von null :

verwendet werden soll %Vor%

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.

    
Christian Hayter 28.02.2012, 16:46
quelle
16

Sie können den Nullkoaleszenzoperator verwenden, damit Ihr Beispiel folgendermaßen aussieht:

%Vor%     
BlackBear 28.02.2012 16:46
quelle
3

Wenn Ihre Eigenschaft Nullable<> ist und ein null Wert true bedeutet, könnten Sie dies anstelle einer expliziten Null-Überprüfung verwenden:

%Vor%     
Cᴏʀʏ 28.02.2012 16:47
quelle
2

Gute Antworten wurden gegeben, ich würde vielleicht ein

machen %Vor%

in einer statischen Hilfsklasse.

    
mindandmedia 28.02.2012 16:48
quelle
1

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).

    
zmbq 28.02.2012 16:46
quelle

Tags und Links