У меня есть пара вопросов. Буквально. Как я понял, нет варианта объявить метку в IL коде, не используя Define-MarkLabel();
Может кто рассказать, как работает MarkLabel? У кого-нибудь может годная статья есть на этот счёт? Интересно, как компилятор вставляет метку к условиям.
Например, вставляются в ILStream с инструкции из рода br...... минимум два байта(2-5, понятно, что в зависимости от условия)(с учетом того, что вставляется не голый br... опкод, не без операнда), последний равен 0x00. Даже после простановки метки он остается нулевым байтом.
Экспериментирую на примере от майков:
https://docs.microsoft.com/ru-ru/dotnet/api/system.reflection.emit.ilgenerator.definelabel?view=netcore-3.1И уже после return myTypeBldr.CreateType(); эти нулевые байты забиваются.
Я посмотрел сурсы, там жесть полная, может кому-то было интересно и смотрел под капот и вкратце сможет объяснить суть?