是否可以使用泛型類型參數定義DynamicMethod? MethodBuilder類具有DefineGenericParameters方法。 DynamicMethod是否有對應的?例如,是否有可能使用DynamicMethod創建一個具有簽名的方法?具有泛型類型參數的DynamicMethod
void T Foo<T>(T a1, int a2)
是否可以使用泛型類型參數定義DynamicMethod? MethodBuilder類具有DefineGenericParameters方法。 DynamicMethod是否有對應的?例如,是否有可能使用DynamicMethod創建一個具有簽名的方法?具有泛型類型參數的DynamicMethod
void T Foo<T>(T a1, int a2)
其實有一種方式,它不是一般的,但你會得到這樣的想法:
public delegate T Foo<T>(T a1, int a2);
public class Dynamic<T>
{
public static readonly Foo<T> Foo = GenerateFoo<T>();
private static Foo<V> GenerateFoo<V>()
{
Type[] args = { typeof(V), typeof(int)};
DynamicMethod method =
new DynamicMethod("FooDynamic", typeof(V), args);
// emit it
return (Foo<V>)method.CreateDelegate(typeof(Foo<V>));
}
}
你可以這樣調用:
Dynamic<double>.Foo(1.0, 3);
這似乎並不可能:如您所見DynamicMethod
沒有DefineGenericParameters
方法,它從它的MethodInfo
基類,只是拋出NotSupportedException
繼承MakeGenericMethod
。
幾個可能的原因:
AppDomain.DefineDynamicAssembly
DynamicMethod
一次爲每個組的類型參數
如果您是動態創建的方法,那麼你不知道的類型,當你生成的方法?這將消除需要有一個通用的動態方法? – Steven 2009-04-25 13:29:18
我在寫一個小解釋器,我想用DynamicMethods來編譯函數。該語言支持參數多態,並且使用類型參數並不需要爲每個參數組合生成重載。 – Alex 2009-04-25 17:45:22
請參閱:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2508820-dynamicmethod-to-support-generic-type-parameters-l投票支持添加支持。 – cdiggins 2014-07-10 16:02:48