from - return enum c#
C#int, Int32 y enumeraciones (2)
El tipo subyacente es de hecho el mismo, pero el compilador depende del tipo que sea como el alias exacto. Este es un error de compilación basado en el análisis sintáctico. Eché un vistazo a la especificación de gramática C # y los tipos subyacentes definidos allí como tokens basados en el alias (por ejemplo, ''int'', ''unit'' ... etc.). El analizador espera cadenas específicas de la regla de gramática de tipos integrales .
El error es un error de análisis aunque tanto enum Enum : int
significa lo mismo que enum Enum : Int32
.
No sé el motivo para forzar este límite al paso de análisis sintáctico, pero puedo intentar adivinar: dado que Int32 no es una palabra clave, podría referirse a algo diferente de la estructura int real. Si el analizador debe conocer el tipo para construir diferentes AST para cada tipo de base, entonces no puede depender de un token que no sea una palabra clave.
Aunque la especificación C # define la palabra clave int como el alias explícito System.Int32 , sigue siendo un problema obtener esta información sobre el tipo explícito (Int32) durante el paso de análisis, ya que requiere mucha información de contexto que no se puede inferir en este paso.
Si int
es sinónimo de Int32
¿por qué?
enum MyEnum : Int32
{
Value = 1
}
... no compilar? Donde como
enum MyEnum : int
{
Value = 1
}
will, aunque al pasar el cursor sobre la palabra int se mostrará struct System.Int32?
Una curiosidad familiar ... el lenguaje especifica estados (14.1):
Una declaración enum puede declarar explícitamente un tipo subyacente de byte, sbyte, short, ushort, int, uint, long o ulong. Tenga en cuenta que char no se puede usar como un tipo subyacente. Una declaración enum que no declara explícitamente un tipo subyacente tiene un tipo subyacente de int.
Pero como int
es generalmente solo un alias para System.Int32
no es irracional pensar que cualquiera de los dos podría funcionar ... pero de hecho no es así. En general, no es un gran problema, pero intrigante, no obstante.