В образовательных целях я изучаю немного ИЛ (главным образом потому, что мне было любопытно, что происходит с "%" под капотом (что оказывается в бремене) и начинало отвлекаться...).
Я написал метод, просто вернув true, чтобы немного сломать вещи и задавался вопросом о коде операции "br.s":
.method public hidebysig static bool ReturnTrue() cil managed
{
// Code size 7 (0x7)
.maxstack 1
.locals init ([0] bool CS$1$0000)
IL_0000: nop
IL_0001: ldc.i4.1
IL_0002: stloc.0
IL_0003: br.s IL_0005
IL_0005: ldloc.0
IL_0006: ret
} // End of method Primes::ReturnTrue
После того, как ldc.i4.1 нажимает 1 на стек, а stloc.0 помещает это в 0-й локальный, br.s в основном (насколько мне известно) выполняет 'goto' до ldloc.0 в строке IL_0005.
Почему это? Почему нет линии IL_0004, поэтому это можно опустить?