ジェネリックをILジェネレータで使用することはできますか?ILのジェネリック医薬品は?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
ジェネリックをILジェネレータで使用することはできますか?ILのジェネリック医薬品は?
DynamicMethod method = new DynamicMethod(
"GetStuff", typeof(int), new Type[] { typeof(object) });
ILGenerator il = method.GetILGenerator();
... etc
はい、可能ですが、DynamicMethod
クラスではありません。あなたがこのクラスを使用することに制限されている場合、あなたは運が悪いです。代わりにMethodBuilder
オブジェクトを使用できる場合は、をお読みください。
ジェネリックメソッドの本体を送信することは、ほとんどの目的と目的で、ジェネリックタイプのローカル変数を作成できる点を除いて、他のメソッドの本体を放出することと同じです。
MethodBuilder method;
//... Leaving out code to create MethodBuilder and store in method
var genericParameters = method.DefineGenericParameters(new[] { "T" });
var il = method.GetILGenerator();
LocalBuilder genericLocal = il.DeclareLocal(genericParameters[0]);
このコードを使用して、別の方法からのジェネリックメソッドの呼び出しを放出する:ここで、一般的な引数TとMethodBuilder
を使用して一般的な方法を作成し、型Tの局所を作成する例です。 method
がジェネリックメソッドの定義を記述しMethodInfo
かMethodBuilder
オブジェクトであると仮定すると、以下のように、あなたは、単一の汎用パラメータint
とそのメソッドの呼び出しを発することができる:[ジェネリック型パラメータを持つDynamicMethod]の
il.EmitCall(OpCodes.Call, method.MakeGenericMethod(typeof(int)), new[] { typeof(int) }));
'GetGenericArguments()'を呼び出す代わりに、 'DefineGenericParameters()'によって返された配列を使うことができます。 – svick
ありがとう、私はそれを知らなかった。今修正されました。 – aboveyou00
ありがとう@svick&aboveyouOO。私はそれが不可能であったことを読み、とにかく質問すると思った - 私はその情報が以前のバージョンの.net – sgtz
が重複する可能性(HTTP ://stackoverflow.com/questions/788618/dynamicmethod-with-generic-type-parameters) –
あなたの質問からは分かりません:ジェネリックメソッドを作成するか、ジェネリックタイプ(またはメソッド)をその内部に使用したいですか? – svick
@svick:ジェネリックメソッドを動的に作成したい。 – sgtz