* 2 などに IL を注入して動的メソッドを作成する方法を知っています。
ただし、bが定数であるa * bのようになりたいです。
このことを考慮。
int b = SomeClassInstance.Multiplier;
Func<int,int> MultA = CreateDynMethod(b);
for(int i = 0; i < 1000; i++)
{
int a = GetValueSomewhere();
int result = MultA(a);
Console.WriteLine(result);
}
参照.. b は 1000 回の反復すべてで同じです。ただし、どうなるかはわかりません。0 1 2 など。
私の質問は、 b 値を IL に定数として埋め込む方法です。
これは非常に重要な違いです。var a * var b を計算したくありません。(たとえば、実行時に b == 2 の場合) * 2 を実行する IL を作成したい。
私にはそうする理由があります。質問に書かれているとおりに答えてください。ありがとうございました。
編集。ここにあなたの助けを借りて書くことができたものがあります. どう思うか教えてください
static Func<int, int> IL_EmbedConst(int b)
{
var method = new DynamicMethod("EmbedConst", typeof(int), new[] { typeof(int) } );
var il = method.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldc_I4, b);
il.Emit(OpCodes.Mul);
il.Emit(OpCodes.Ret);
return (Func<int, int>)method.CreateDelegate(typeof(Func<int, int>));
}