В настоящее время у меня возникают проблемы с операторами. Используя следующий код, я хочу сделать вывод, который будет таким же, как при использовании пары if ... else
в С#.
var method = new DynamicMethod("dummy", null, Type.EmptyTypes);
var g = method.GetILGenerator();
g.Emit(OpCodes.Ldstr, "string");
g.Emit(OpCodes.Ldstr, "string");
g.Emit(OpCodes.Call, typeof(String).GetMethod("op_Equality", new Type[]{typeof(string), typeof(string)}));
g.Emit(OpCodes.Ldc_I4, 0);
g.Emit(OpCodes.Ceq);
g.Emit(OpCodes.Brtrue_S, );
var action = (Action)method.CreateDelegate(typeof(Action));
action();
Console.Read();
Мои вопросы:
- Как я могу получить адрес инструкции для передачи ее в качестве параметра для кодов операций ветки?
- Есть ли разница между
BR
иBR_S
,Brtrue
иBrtrue_S
,Brfalse
иBrfalse_S
и аналогичными инструкциями?
Спасибо.