#c# #.net
#c# #.net
Вопрос:
Я новичок в C # и .net, извините, если мой вопрос звучит глупо.
Я следую онлайн-руководству, в котором рассказывается, как распознавать скомпилированный код, ниже приведен снимок от инструктора:
И ниже приведен скриншот с моего компьютера:
Вы можете видеть, что мой — это чисто IL-код, и даже если я изменю настройку на C #: <Main>d_0
раздела больше нет, а код — это чисто C #-код. итак, как я могу переключиться на представление, чтобы я мог видеть «более продвинутый код C #», как у инструктора?
Комментарии:
1. Видите выпадающий список на панели инструментов с надписью «IL»? Измените это на «C #».
2. @Corey Спасибо за ваш ответ. Я действительно сделал это, но это все еще не работает, пожалуйста, обратитесь к моему отредактированному сообщению, в которое я только что добавил новый скриншот
Ответ №1:
Вы используете более современную версию ILSpy по сравнению с вашим инструктором. Ваша более современная версия может лучше преобразовать новые языковые возможности C # в более простой код на C #.
Например, более старые версии ILSpy не могли декомпилировать async
методы с await
ключевыми словами обратно в методы с одним исходным кодом, но вместо этого показывали бы их как скомпилированные многометодные конечные машины (как вы видите, как TaskAwaiter
показано в <Main>d_0
).
Если вам нужен тот же дисплей, что и у вашего инструктора, вам нужно использовать ту же версию ILSpy, что и у них. На скриншоте видно, что они используют версию ILSpy 4 или более раннюю, которая к настоящему времени очень устарела. Вы должны сказать своему инструктору, чтобы он получил последнюю версию (по состоянию на ноябрь 2020 года это версия 6.1).
Комментарии:
1. Я подозреваю, что вы также могли бы сократить версию из
C# 8.0
. Это может ограничить языковые шаблоны, которые ILSpy попытается использовать.2. OP может отключить «Декомпилировать асинхронные методы», чтобы получить тот же вид.
Ответ №2:
На панели инструментов ILSpy есть группа кнопок, которые позволяют выбирать между
- Показывать только общедоступные типы и члены
- Показывать общедоступные, частные и внутренние (по умолчанию)
- Показать все типы и члены (включая созданные компилятором)
Если вы выберете «Показать все типы и члены», вы увидите класс, созданный компилятором, и его метод MoveNext, даже если декомпиляция async
функции включена.