2010-04-16 5 views

Antwort

12

nicht viel Sinn, wirklich, mit der Ausnahme, dass, wenn die Standard zugrunde liegenden Typ (int) ist nicht genug für Sie, dh. Wenn Sie höhere Integer-Werte als diese verwenden möchten, können Sie long eingeben. Dies kann nützlich sein, wenn Sie eine [Flags] Enumeration mit mehr als 32 Werten haben.

Sie können es byte oder short machen nur den Wertebereich zu beschränken, aber es wird tatsächlich nehmen noch 4 Bytes (dh. Elbe wie int).

+3

Haben Sie ein Zitat für diesen letzten Teil? – porges

+9

Für eine einzelne Variable kann der letzte Teil aufgrund von Padding korrekt sein. Ich glaube jedoch, wenn Sie ein großes Array eines Enums mit einem zugrunde liegenden Byte-Typ haben, ist das so, als hätte man ein Byte [] 'anstelle eines' int [] '. –

+0

Ja, was Jon Skeet gesagt hat. Aber wer zum Teufel benutzt eine Reihe von Enums? :) – EMP

3

Von enum (C# Reference)

Der zugrunde liegende Typ gibt an, wie viel Speicher für jeden enumerator zugeordnet ist. Es ist jedoch eine explizite Umwandlung erforderlich, um vom Enum-Typ in einen Integraltyp zu konvertieren.

+2

Ich glaube, ich habe das saftige kleine Stück Information verpasst .. haha – Marlon

3

Abgesehen von den technischen Gründen ... Es gibt hier ein Designprinzip.

die Angabe der Enumeration mit Byte-Speicher ist ein Implementierungsdetail. Die Verwendung der Enumeration ist ein anderes Thema, Sie sollten die Implementierungsdetails davon nicht kennen oder interessieren.

In Client-Code sollte die Tatsache, dass Sie eine Enumeration verwenden, bedeuten, dass Sie in der Tat eine Enumeration, kein Byte oder lange usw. verwenden möchten. Andernfalls verwenden Sie einfach den Datentyp, den Sie meinen.

Stark typensprache wie C# bemühen sich, es ein wenig schwieriger zu machen außerhalb Ihrer Codierung "Verträge" dies in der Regel hilft App-Design nur ein bisschen besser machen.

Jetzt sage ich natürlich nicht, dass es keine Zeiten gibt, in denen Sie an Implementierungsdetails beteiligt werden müssen. Ein gutes Beispiel ist ein object relational mapper (ORM), bei dem Sie einen C# -Datentyp einem Datenbank-Datentyp zuordnen Enums sind ein gutes Beispiel, bei dem Sie den Speichertyp kennen müssen, um ihn zuzuordnen. Aber in diesen Fällen, seine IMO gut zu werfen oder zu reflektieren, ist es eine gute Flagge in Bewertungen, dass Sie hier speziell außerhalb der üblichen Verwendung treten.

Verwandte Themen