Le type sous-jacent est en effet le même, mais le compilateur dépend du type à utiliser comme alias exact. C'est une erreur de compilation basée sur l'analyse. J'ai jeté un coup d'oeil à la spécification de grammaire C# et aux types sous-jacents qui y sont définis comme des jetons basés sur l'alias (par exemple, 'int', 'unit' ... etc.). L'analyseur attend des chaînes spécifiques de la règle de grammaire intégrale.
L'erreur est une erreur d'analyse même si les deux enum Enum : int
signifient la même chose que enum Enum : Int32
. Je ne connais pas la raison de forcer cette limite à l'étape d'analyse, mais je peux essayer de deviner: Puisque Int32 n'est pas un mot-clé, il peut se référer à quelque chose d'autre que la structure int réelle. Si l'analyseur doit connaître le type afin de construire différents AST pour chaque type de base, il ne peut pas dépendre du jeton qui n'est pas un mot-clé.
Même si la spécification C# définit le mot-clé int alias explicite System.Int32, il y a encore un problème pour obtenir ces informations sur le type explicite (Int32) lors de l'étape de l'analyse car elle nécessite beaucoup d'informations de contexte qui ne peut être déduit à cette étape.
Quelle est l'erreur au moment de la compilation? – Donnie
@Donnie: Type octet, sbyte, court, ushort, int, uint, long ou ulong attendu. Apparemment, une restriction dans .Net force l'utilisateur à utiliser uniquement des mots-clés au lieu des noms de classe dans une énumération. – Webleeuw
Intéressant. J'ai appris quelque chose, yay! – Donnie