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