在c#中通过反射机制method.Invoke激活方法时怎么传递泛型参数,比如List<自定义数据结构>list?

2025-01-05 03:14:01
推荐回答(1个)
回答1:

可以这么搞:
Assembly asm = Assembly.Load("UITestDesignTools1.0");//加载反射的dll
List<类型> list = new List<类型>();
Object[] parameters = new Object[2];//这里存放参数,有几个参数那么数组就定义几个
parameters[0] =list ;//给第一个参数赋值
parameters[1] = 123456 ;//给第2个参数赋值
Object instanceObj = asm.CreateInstance("Windows.Forms.frmControlStyle", true, System.Reflection.BindingFlags.Default, null, parameters, null, null); //反射获取指定类的对象

Form f = instanceObj as Form;
f.Show()

上面这样就已经在反射对象的时候传参了。这里是给构造方法传参,
如果是给类里面的方法传参,看下面的

------------------------------------------------分割线----------------------------------------------------------
如果非要用invoke的话,稍改动一下

Type testClassType = Type.GetType( "Test.TestClass", false );

if ( testClassType != null )
{
object instance = Activator.CreateInstance( testClassType, 10, 20 );
MethodInfo test1 = testClassType.GetMethod( "Test1", BindingFlags.Instance | BindingFlags.Public );
List<类型> list = new List<类型>();
Object[] parameters = new Object[2];//这里存放参数,有几个参数那么数组就定义几个
parameters[0] =list ;//给第一个参数赋值()
parameters[1] = 123456 ;//给第2个参数赋值
test1.Invoke( instance, parameters );
}