2011-06-01 9 views
18

Quiero declarar una nueva enumeración con el tipo subyacente no predeterminado. Esto funciona:¿Por qué la declaración enum acepta breve pero no Int16

public enum MyEnum : short 
{ A, B, C, } 

Pero no entiendo la razón por la cual este no se compila:

public enum MyEnum : System.Int16 
{ A, B, C, } 

compilador dice

Tipo de bytes, sbyte, corta, ushort, int , uint, largo o ulong esperado

Entiendo que corto es un alias para Int16 en todas las versiones de .NET (incluye sabores de 32/64 bits). No veo por qué el compilador le da un significado diferente al alias en ese caso particular.

¿Alguna explicación?

+0

Recuerdo una pregunta similar cerrarse las ayer – V4Vendetta

+0

Encontré dos preguntas casi idénticas con Google: http://stackoverflow.com/questions/3774650/enum-members-of-int32-type y http://stackoverflow.com/questions/1813408/c-int-int32 y enumeraciones. –

+0

No lo encontré a pesar de pasar varios minutos leyendo resultados de búsqueda :) –

Respuesta

17

La sintaxis es correcta. C# especificación establece explícitamente que el tipo subyacente de la enumeración debe ser byte, sbyte, short, ushort, int, uint, long o ulong.

Lea lo que Microsoft dice acerca de esto here.

+1

+1 su enlace apunta a una explicación más concisa :) – Gishu

+0

El enlace está roto. Corrija – Dmitry

+0

@Dmitry Microsoft eliminó el enlace; funcionó cuando lo publiqué. Lo arreglé ahora, pero no lo arreglaré cada vez que se rompa. –

2

"... El segundo ejemplo está tratando de heredar de un tipo que se deriva de System.ValueType, que está estrictamente prohibido ..."

Leer here:

+0

Mucho debate por lo que parece una cosa pequeña :) – Gishu

+0

eheheh! ... ¡Estoy de acuerdo! ;) – danyolgiax

Cuestiones relacionadas