Pergunta

Se int é sinônimo de Int32 por que

enum MyEnum : Int32
{
    Value = 1
}

... não compilar? Onde como

enum MyEnum : int
{
    Value = 1
}

vontade, apesar de passar o cursor sobre a palavra int irá exibir struct System.Int32?

Foi útil?

Solução

O tipo subjacente é realmente o mesmo, mas o compilador depende do tipo a ser como o alias exato. Este é um erro de compilação com base em análise. Dei uma olhada C especificação # gramática e os tipos subjacentes definidos lá como fichas com base no alias (por exemplo, 'int', 'unidade' ... etc.). O analisador espera cordas específicas do integrais tipos regra gramatical.

O erro é um erro de análise embora ambos enum Enum : int significa o mesmo que enum Enum : Int32.

Eu não sei a razão para forçar esse limite para analisar passo, mas eu posso tentar adivinhar: Desde Int32 não é uma palavra-chave que pode referir-se a algo diferente do struct int real. Se o analisador tem que saber o tipo, a fim de diferente construção AST para cada tipo de base, então ele não pode dependem de token que não é uma palavra-chave.

Mesmo que a especificação C # define o int palavra-chave como apelido explícita System.Int32 , ainda é um problema para obter esta informação sobre o tipo explícito (Int32) durante a análise etapa, uma vez que requer uma grande quantidade de informações de contexto que não pode ser deduzida nesta etapa.

Outras dicas

Uma curiosidade familiar ... estados da linguagem de especificação (14.1):

Uma declaração enum pode declarar explicitamente um tipo subjacente de byte, sbyte, short, ushort, int, uint, longo ou ulong. Note-se que de char não pode ser usado como um tipo subjacente. Uma declaração enum que não declarar explicitamente um tipo subjacente tem um tipo subjacente de int.

Mas desde int é geralmente apenas um alias para System.Int32 não é razoável para pensar tanto trabalho poder ... mas na verdade, não. Geralmente, não é um grande problema, mas nenhum intrigante a menos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top