Интервал C#, Int32 и перечисления

Имея опыт с Дельфи, я сказал бы, что использование с должно быть оптимизацией размера последнего средства, возможно выполненной некоторым алгоритмом минимизатора JavaScript с доступом к статическому анализу кода для проверки его безопасности.

проблемы обзора можно войти со свободным использованием с , оператор может быть королевской болью в **, и я не хотел бы, чтобы любой испытал сеанс отладки для выяснения что он.. продолжается в Вашем коде, только чтобы узнать, что он получил элемент объекта или неправильную локальную переменную вместо Вашей глобальной или внешней переменной объема, которую Вы предназначили.

VB с оператор лучше, в котором этому нужны точки для устранения неоднозначности обзора, но Дельфи с оператор является заряженным оружием со вспыльчивым, и это смотрит на меня, как будто JavaScript каждый достаточно подобен для гарантирования того же предупреждения.

33
задан Joey 5 March 2013 в 08:40
поделиться

2 ответа

The underlying type is indeed the same, but the compiler depends on the type to be as the exact alias. This is a compilation error based on parsing. I took a look at C# grammar specification and the underlying types defined there as tokens based on the alias (e.g. 'int', 'unit'... etc.). The parser expects specific strings from the integral-types grammar rule.

The error is a parsing error even though both enum Enum : int means the same as enum Enum : Int32.

I don't know the reason for forcing this limit to parsing step, but I can try guessing: Since Int32 is not a keyword it might refer to something other the actual int struct. If the parser has to know the type in order to build different AST for each base type then it cannot depend on token which is not a keyword.

Even though the C# specification defines the int keyword as explicit alias System.Int32, it's still a problem to get this information about the explicit type (Int32) during parsing step since it requires a lot of context information which cannot be inferred at this step.

30
ответ дан 27 November 2019 в 18:33
поделиться

Знакомое любопытство ... спецификация языка утверждает (14.1):

Объявление перечисления может явно объявлять базовый тип byte, sbyte, short, ushort, int, uint, long или улонг. Обратите внимание, что char нельзя использовать в качестве базового типа. Объявление перечисления, которое явно не объявляет базовый тип, имеет базовый тип int.

Но поскольку int - это , обычно просто псевдоним для System.Int32 ] нет неразумно думать, что любой из них может работать ... но на самом деле это не так. Обычно это не большая проблема, но тем не менее интригующая.

14
ответ дан 27 November 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: