我有反思的问题,基本上我需要调用类的这样的方法:反射式适应
public Int32 addNumer (Int32 a, Int32 b)
{
return (a+b);
}
,我需要用反射来调用它,因为我是从“外部”收到此输入C# 软件,我需要评估我需要调用的女巫方法。
的问题是,因为入端i有2个目的是通过“提示命令行”, 传递O I已经在字节将其转换:
Byte a = 10;
Byte b = 10;
所以,当我执行便餐看到错误“不能找到方法addNumber“ ,因为没有找到输入中有2个字节的方法。我认为它期望 2 Int32而不是2字节。
我该如何解决?
D.
UPDATE 1:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);
更新2: 因为我收到此呼叫从一个EXE文件我无法投射到的Int32:
MyProjectPrompt.exe Namespace.Class.Method param1 param2
例如:
MyProjectPrompt.exe It.Company.Math.Add 10 10
SOLUTION
ParameterInfo[] listaParametr = method_to_invoke.GetParameters();
ParameterInfo infoParam;
for(Int32 va=0;va<listaParametr.Length;va++)
{
infoParam = listaParametr[va];
for(Int32 va2=0;va2<args_values.Length;va2++)
{
if(args_names[va2]==infoParam.Name)
{
args_values[va2] = Convert.ChangeType(args_values[va2],
infoParam.ParameterType);
}
}
}
基本上为每帕拉姆通过,我投它。 之后,我动态传递:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);
将代码添加到您使用反射查找方法的位置。 – albertjan 2012-01-11 10:49:20
所以你不知道'addNumber'的名字,并且希望找到它,因为它可以用2个字节来调用? – 2012-01-11 10:49:52
如果以上是肯定的,然后尝试获取具有2个相同参数的所有方法的列表,然后基于'IsAssignableFrom'过滤基于' – 2012-01-11 10:50:22