На этом сайте я обычно вижу, что люди отвечают на вопросы такими ответами, как «это работает так, потому что компилятор заменяет [вещь] на [другую вещь]», поэтому мой вопрос в том, как люди узнают / изучают это?Где я могу научиться этим вещам?
Наиболее точным источником интерпретации кода компилятором C # является спецификация языка C #.
Кроме того, следующие блоги предоставляют гораздо больше информации о языке C #.Обязательное чтение для всех, кто хочет стать экспертом по языку
Один из методов - это скомпилировать код, а затем декомпилировать его с помощью таких инструментов, как ILSpy .Используя такой инструмент, вы можете просмотреть необработанный IL и посмотреть, что производит компилятор.
В дополнение к другим ответам я хотел бы отметить, что LINQPad - мой любимый инструмент для проверки IL на наличие быстрых фрагментов.
Вы можете набрать фрагмент кода и сразу увидеть IL. Это, безусловно, самый простой в использовании инструмент, и вы можете вносить изменения и мгновенно видеть результаты.
Книга Никлауса Вирта Построение компилятора (PDF) - введение в теорию и методы построения компилятора. Это дает вам общее представление о том, что такое компилятор и что он делает.
В дополнение к проверке Промежуточного языка и прочтению спецификации языка, позвольте мне добавить « CLR via C # » Джеффри Рихтера.Контрольный номер Библиотеки Конгресса США для прессы: 2009943026. Эта ссылка удивительна и подробно описывает происходящее под обложками.