Ist es vorzuziehen, enum Felder explizit zu setzen, anstatt nur ihre Namen zu definieren? Z.B. irgendwelche Vor- und Nachteile für Enum1 vs Enum2?
Enum1:
%Vor%Enum2:
%Vor%P.S. Diese Frage bezieht sich nicht auf Enums, die in der Datenbank gespeichert werden, was erfordert, dass Werte explizit festgelegt werden.
Bearbeiten: Angenommen, alle Werte sind 0, 1, etc ... Sie sind nicht negativ oder etwas.
Enum1 und Enum2 werden auf die gleiche Enumeration kompiliert. Vom Standpunkt der Programmierung gibt es keinen Unterschied. Vom Gesichtspunkt der Wartung aus kann es Probleme geben oder auch nicht.
Einerseits ist das Deklarieren expliziter Werte für ein [Flags]
enum unbedingt erforderlich; und sie müssen Werte mit Potenzen von 2 sein.
Auf der anderen Seite können explizite Werte die Wartbarkeit reduzieren, indem einfach Werte erstellt werden, die in der Zukunft nicht geändert werden können oder sollen.
Im Allgemeinen bevorzuge ich es, keine expliziten Werte zu deklarieren, es sei denn, die Werte selbst sind aus irgendeinem Grund signifikant - wenn Ihre C # -Enumeration beispielsweise eine C-Enumeration umschließt.
Sie würden Enum1 verwenden, wenn Sie Werte benötigen, die nicht zusammenhängend sind.
%Vor%Auch das explizite Festlegen der Zahlen ist einfacher zu lesen, und das Hinzufügen eines Werts in der Mitte ändert keinen der anderen Werte.
Es ist nützlich, die Werte explizit festzulegen, wenn sie außerhalb des Programms eine Bedeutung haben. Beispielsweise könnte eine Anwendung eine Protokolldatei schreiben, die einen Schweregrad-Wert verwendet, den Sie später zum Filtern der Protokolldatei verwenden können. Wenn Sie die Werte explizit in einer Enumeration angeben, können Sie die Enumeration in Ihrem Code (z. B. Kritisch, Fehler, Warnung) anstelle der numerischen Werte verwenden. In der Protokolldatei sollte der numerische Wert zur einfacheren Sortierung geschrieben werden.
Ich habe auch eine Enumeration gesehen, die Werte in einer Datenbankreferenztabelle repräsentiert. In diesem Fall sollten Sie sicherstellen, dass die Elemente in der Enumeration immer den gleichen Wert wie die Datenbanktabelle haben und dass das Einfügen eines neuen Elements in der Mitte der Enumeration die Werte nicht durcheinanderbringt.
Verwenden Sie Beispiel 1, wenn Sie tatsächlich Zahlen benötigen (d. h. Sie müssen wissen, dass something2 tatsächlich gleich 2 ist)
Für alle anderen Optionen keine Zahlen verwenden. Auf diese Weise können Sie problemlos weitere Elemente zu Ihrer Enumeration hinzufügen, ohne anderen Code zu unterbrechen, der sich möglicherweise auf Ihre Enumeration bezieht.
Ich habe Probleme beim Serialisieren von Enums, die den Wert 0 nicht enthalten, wenn Sie sie über eine Web-Service-Schnittstelle verwenden.
Es kommt darauf an, was Sie mit Ihnen machen. Wenn Sie sie mit [Flags] verwenden, müssen Sie sie explizit festlegen. Wenn nicht, dann funktioniert jeder Weg von einem Codierungsstandpunkt aus. Aus Gründen der Lesbarkeit oder (wie erwähnt) Verwendung in einer Datenbanksituation sollten Sie sie jedoch explizit festlegen. Eine weitere Überlegung ist die Codierung Standards Ihres Arbeitsplatzes und Serialisierung.
Enum 1 ist auch notwendig, wenn Sie markierte Enums verwenden müssen: Ссылка
Wenn Sie nur int-ähnliche Konstanten verwenden möchten, deren Werte nicht wichtig sind, verwenden Sie den Standardwert. Wenn die Werte wichtig sind, dann setze sie.
Ein Beispiel für Werte, die wichtig sind, ist das Erstellen von Werten für Bit-Flags, die in etwa so aussehen können:
%Vor%Beachten Sie auch, dass Integer-unterstützte Enums einen Standardwert von (int) (oder Null) haben, wenn ihr Wert nicht gesetzt ist. Daher kann es bei Verwendung von implizit nummerierten Enums schwierig sein, Enum-Werte zu unterscheiden die nicht festgelegt wurden aus enum-Werten , die absichtlich auf die erste Option gesetzt wurden . Dies könnte ein gutes Argument für die explizite Zuweisung von ganzzahligen Werten zu Ihren enum-Werten sein, mit einer Start-Ganzzahl ungleich Null. Es sei denn, Sie machen Ihren ersten Wert "NotAssigned" oder so.