Warum muss ich enums in C # int deklarieren?

8

Das ist mein Code:

%Vor%

Gibt es trotzdem etwas, um das Casting zu verhindern?

    
Ricardo Amaral 28.11.2008, 15:56
quelle

3 Antworten

25

Sort of - statt m.Msg:

%Vor%

Der Grund, warum Sie die Besetzung überhaupt brauchen, ist, dass in C # enums nicht nur Zahlen enthalten sind, sondern Nummern, die mit dem Typ verknüpft sind. Das hindert Sie daran zu tun (ohne Casting):

%Vor%

Das ist eindeutig eine gute Sache :) Wenn Sie jedoch müssen, können Sie immer "über" den zugrunde liegenden Typ (in diesem Fall int) gehen.

    
Jon Skeet 28.11.2008, 15:58
quelle
2

Was ist Message.Msg definiert als?

Ich wette, es ist Int32.

Ich wette auch WindowsMessagesFlags ist Ihr Typ, aber Message stammt aus dem Framework.

Dies bedeutet, dass Sie Ihre eigene Enum mit einem Framework-gebauten Objekt verwenden, und natürlich werden sie einige Inkompatibilitäten in Bezug auf Typen haben.

Ein enum ist ein starker Typ, nicht nur eine Zahl , es ist eine Zahl mit einem Namen in einem Kontext . Dieser Name, Kontext, Nummer, Teil ist nicht direkt kompatibel mit nur Zahlen, und deshalb müssen Sie umwandeln.

    
quelle
0

Ein Grund dafür ist, dass C # zur Zeit (4.0) nicht erlaubt, eine implizite Operatorüberladung (ein Cast) innerhalb einer Erweiterungsmethode zu schreiben ( verwandte Frage ) für jeden Typ einschließlich einer Aufzählung. Es wäre schön, sauber zu / von Int16 zu konvertieren, wenn es beispielsweise mit einer schwach typisierten Datenbank oder einem schwach typisierten Serialisierungsformat (Binärschreiber) integriert wird.

    
crokusek 23.12.2012 07:43
quelle

Tags und Links