我的反射有问题,基本上我需要像这样调用 Class 的方法:
public Int32 addNumer (Int32 a, Int32 b)
{
return (a+b);
}
我需要用反射来调用它,因为我从“外部”C#软件接收到这个输入,我需要评估我需要调用的女巫方法。
问题是,作为输入,我有 2 个对象通过“提示命令行”传递,我已将其转换为字节:
Byte a = 10;
Byte b = 10;
因此,当我执行 Refection 时,我看到一个错误“找不到方法 addNumber”,因为没有找到输入中有 2 个字节的方法。我认为它期望 2 Int32 而不是 2 Byte。
我该如何解决?
D.
更新 1:
Object result_object = target_class.InvokeMember(method,
BindingFlags.InvokeMethod, null, target_object,
args_values, null, null, args_names);
更新 2: 我无法转换为 Int32,因为我从 EXE 文件中收到此调用:
MyProjectPrompt.exe Namespace.Class.Method param1 param2
例子:
MyProjectPrompt.exe It.Company.Math.Add 10 10
解决方案
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);