Question

Si int est synonyme de Int32 , pourquoi

enum MyEnum : Int32
{
    Value = 1
}

... pas compiler? Où comme

enum MyEnum : int
{
    Value = 1
}

, même si le curseur de la souris survole le mot int affichera struct System.Int32?

Était-ce utile?

La solution

Le type sous-jacent est en effet le même, mais le compilateur dépend du type pour être l’alias exact. Ceci est une erreur de compilation basée sur l'analyse. J'ai jeté un coup d'œil à la spécification grammaticale C # et aux types sous-jacents définis ici 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-types .

L'erreur est une erreur d'analyse même si enum Enum: int a la même signification que enum Enum: Int32 .

Je ne connais pas la raison pour laquelle cette limite a été forcée à l'analyse, mais je peux essayer de deviner: puisque Int32 n'est pas un mot clé, il est possible qu'il fasse référence à autre chose que l'interface 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 le faire. dépend du jeton qui n'est pas un mot clé.

Même si la spécification C # définit le mot clé int en tant qu'alias explicite System.Int32 , l'obtention de cette information sur le type explicite (Int32) lors de l'analyse reste un problème. étape car elle nécessite beaucoup d’informations contextuelles qui ne peuvent pas être déduites à cette étape.

Autres conseils

Une curiosité familière ... La langue spécifie (14.1):

  

Une déclaration enum peut déclarer explicitement un type sous-jacent d'octet, sbyte, short, ushort, int, uint, long ou ulong. Notez que char ne peut pas être utilisé comme type sous-jacent. Une déclaration enum qui ne déclare pas explicitement un type sous-jacent a un type sous-jacent int.

Mais puisque int est généralement , un alias pour System.Int32 n'est pas déraisonnable de penser que l’un ou l’autre pourrait fonctionner… mais en réalité, cela ne fonctionne pas. Ce n'est généralement pas un gros problème, mais il n'en reste pas moins intriguant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top