C# &引用;方法未在泛型类型定义中声明;错误

C# &引用;方法未在泛型类型定义中声明;错误,c#,reflection,C#,Reflection,我正在尝试动态生成这样的方法: MyList<T> CreateList<T>(T arg) => new MyList<T>(){arg}; 在ilgen.Emit(OpCodes.Callvirt,TypeBuilder.GetMethod(t_list_type,typeof(MyList).GetMethod(“添加”))执行程序失败带有消息: 指定的方法不能是动态的或全局的,必须在泛型类型定义上声明 我不明白,为什么这样的代码会失败?至于我,

我正在尝试动态生成这样的方法:

MyList<T> CreateList<T>(T arg) => new MyList<T>(){arg};
ilgen.Emit(OpCodes.Callvirt,TypeBuilder.GetMethod(t_list_type,typeof(MyList).GetMethod(“添加”))执行程序失败带有消息:

指定的方法不能是动态的或全局的,必须在泛型类型定义上声明


我不明白,为什么这样的代码会失败?至于我,我认为它应该可以工作——我故意使用静态方法
TypeBuilder.GetMethod

我建议您在尝试创建IL时始终使用静态方法。 您就快到了,但是
Add
方法没有在
MyList
中定义,而是在
List
中定义,您可以在这里看到:

IL_0000: newobj instance void class MyList`1<!!T>::.ctor()
IL_0005: dup
IL_0006: ldarg.1
IL_0007: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<!!T>::Add(!0)
IL_000c: ret
IL_0000: newobj instance void class MyList`1<!!T>::.ctor()
IL_0005: dup
IL_0006: ldarg.1
IL_0007: callvirt instance void class [mscorlib]System.Collections.Generic.List`1<!!T>::Add(!0)
IL_000c: ret
var add = TypeBuilder.GetMethod(typeof(List<>).MakeGenericType(TInput), typeof(List<>).GetMethod("Add"))
ilgen.Emit(OpCodes.Callvirt, add);