Nullable enum oder ein zusätzliches Element

8

Betrachten Sie die folgende Enum und ein entsprechendes Nullwertfeld dieses Typs

%Vor%

Alternativ könnte ich die enum und das entsprechende Feld als

deklarieren %Vor%

Dieses nicht nullbare Feld wird auf den ersten Wert initialisiert, d. h. "Nicht angegeben", und ich erreiche das gleiche Ergebnis wie ein Nullwert ("Nicht spezifiziert" würde "option.HasValue" ersetzen).

Warum also eine Nullable? Irgendwelche Leistungsgewinne oder andere Vorteile?

    
alwayslearning 13.08.2010, 11:05
quelle

5 Antworten

10

Gemäß der Dokumentation :

  

Der zugrunde liegende Standardtyp des   Aufzählungselemente ist int. Durch   Standardmäßig hat der erste Enumerator die   Wert 0 und der Wert von jedem   aufeinanderfolgender Enumerator wird um erhöht   1.

     

...

     

Der Standardwert einer Enumeration E ist der   Wert, der durch den Ausdruck (E) 0 erzeugt wird.

Es gibt auch die Möglichkeit, diesen Standardwert zu ändern:

%Vor%

In diesem Fall ist Unspecified nicht mehr der Standardwert.

Der einzige mögliche Vorteil, den ich sehen kann, wenn ich eine Nullable-Enumeration verwende, ist, dass der Nullwert nicht von der Definition der Enumeration abhängt.

Meiner Meinung nach sollten Sie entscheiden, welches Sie verwenden möchten, abhängig davon, ob Sie die Semantik von Standardwert oder nicht zugeordneten Wert benötigen.

    
Darin Dimitrov 13.08.2010, 11:12
quelle
14

Ich weiß, dass Sie nach Gründen für nulblierbare Enums fragen, aber persönlich sehe ich keinen Grund, sie zu verwenden.

Eine Enum, die ein "ungültiges" Mitglied hat, ist meiner Meinung nach viel lesbarer und vermittelt viel mehr Bedeutung als eine Nullable.

    
Oded 13.08.2010 11:09
quelle
1

Ich würde den zusätzlichen "unspezifizierten" Wert der Enumeration wählen. Mit einem nullbaren Wert machen Sie die Annahme, dass ein anderer Entwickler null passieren würde. Bei einem vollständigen Array von Werten gibt es keine Annahme - jede mögliche Option ist innerhalb dieser Wertemenge klar.

    
user164226 13.08.2010 11:27
quelle
0

Der einzige Grund (abgesehen von der persönlichen Vorliebe), eine NULL-fähige Aufzählung zu verwenden, ist, wenn Sie sie sowohl mit als auch ohne NULL verwenden.

Wenn Sie eine Nullable-Enumeration verwenden, haben Sie nicht den Nullwert als einen der Werte. Sie können den Wert aus der Nullable-Eigenschaft abrufen und ihn woanders verwenden, wo der Nullwert kein möglicher Wert sein sollte.

    
Guffa 13.08.2010 11:24
quelle
0

Zusätzlich zu dem, was gesagt wurde, würde ich argumentieren, dass Performance-nullable Enums auch schlechter sind, da sie mehr Speicherzuweisungen ergeben.

Ein scheinbar unschuldig aussehender Code wie dieser:

%Vor%

Kompiliert tatsächlich zu etwas wie diesem:

%Vor%

Das gilt für alle Nullables, aber ich fand es besonders überraschend für Enums (und noch mehr für Booleans), da mein erster Instinkt war zu denken, dass dies vom Compiler optimiert wird, da es alle möglichen Werte im Voraus kennt und kann sie zwischenspeichern und verwenden.

    
tzachs 24.12.2014 18:45
quelle

Tags und Links