且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用反射来调用方法和传递参数的类型是未知在编译时?

更新时间:2023-11-30 21:29:04

试试这个:

void Main(string[] args)
{
 ClassA a = new ClassA();
 System.Type[] types = new Type[(args.Length -1) / 2];
 object[] ParamArray = new object[types.Length];

 for (int i=0; i < types.Length; i++)
 {
      if(args[i*2 + 1].EndsWith("&"))
    {
        var type = System.Type.GetType(args[i*2 + 1].Substring(0,args[i*2 +1].Length - 1)); 
        ParamArray[i] = Convert.ChangeType(args[i*2 + 2],type);
        types[i] = System.Type.GetType(args[i*2 + 1]);
    }
    else
    {
        types[i] = System.Type.GetType(args[i*2 + 1]);
        ParamArray[i] = Convert.ChangeType(args[i*2 + 2],types[i]);
    }      
 }

 MethodInfo callInfo = typeof(ClassA).GetMethod(args[0],types);
 callInfo.Invoke(a, ParamArray);    

}

编辑:这应该采取的基准参数保健

This should take care of the reference parameters