Базовый тип действительно тот же, но компилятор зависит от типа в качестве точного псевдонима. Это ошибка компиляции, основанная на разборе. Я взглянул на спецификацию грамматики C # и базовые типы, определенные там как токены на основе псевдонима (например, «int», «unit» ... и т. Д.). Синтаксический анализатор ожидает определенные строки из правила грамматики тип-интегралов .
Ошибка - ошибка синтаксического анализа , хотя оба значения enum Enum : int
означают то же самое, что и enum Enum : Int32
.
Я не знаю причину принудительного ограничения этого шага для шага синтаксического анализа, но я могу попытаться угадать: поскольку Int32 не является ключевым словом, оно может ссылаться на что-то другое, на самом деле на структуру int. Если синтаксический анализатор должен знать тип для создания различных AST для каждого базового типа, он не может зависеть от токена, который не является ключевым словом.
Несмотря на то, что спецификация C # определяет ключевое слово int в качестве явного псевдонима System.Int32 , получить эту информацию об явном типе (Int32) на этапе синтаксического анализа все еще остается проблемой, поскольку для этого требуется много контекстной информации, которая не может быть выведена на этом этапе.