Короче говоря, то, что действительно в IL, не обязательно совпадает с тем, что действует в исходном языке.Довольно часто дают сгенерированные компилятором (иначе называемые синтетические в некоторых кругах) имена членов, которые являются недопустимыми в языке, поскольку это позволяет избежать любых возможных конфликтов.Их иногда называют невыразимыми именами , так как они не могут быть «произнесены» на языке оригинала.Например, компилятор C # обычно включает <>
в такие имена.
Что касается решения проблемы - некоторые декомпиляторы будут определять, откуда такие имена пришли автоматически, но обычно вы можете просто изменить имя везде.Вы не получите в конечном итоге исходный код, но если вы посмотрите на то, чем в итоге вы делаете , вы сможете легче разобраться с тем, что сделал исходный * 1011.* выглядит так.
Обратите внимание, что компилятор может генерировать больше, чем просто недопустимые имена: например, в C # блоки итераторов генерируют IL, который в некоторых случаях не может быть выражен непосредственно в самом "нормальном" C #.Возможно, это не проблема для вас, но об этом стоит знать.