C# 反射式自适应

C# 反射式自适应,c#,system.reflection,C#,System.reflection,我对反射有一个问题,基本上我需要调用一个类的方法,如下所示: public Int32 addNumer (Int32 a, Int32 b) { return (a+b); } 我需要用反射来调用它,因为我从“外部”C接收这个输入# 软件和我需要评估我需要调用的witch方法 问题是,作为输入,我有2个对象通过“提示命令行”传递, o我已将其转换为字节: Byte a = 10; Byte b = 10; 因此,当我执行Refection时,我看到一个错误“找不到方法addNumb

我对反射有一个问题,基本上我需要调用一个类的方法,如下所示:

public Int32 addNumer (Int32 a, Int32 b)
{
    return (a+b);
}
我需要用反射来调用它,因为我从“外部”C接收这个输入# 软件和我需要评估我需要调用的witch方法

问题是,作为输入,我有2个对象通过“提示命令行”传递, o我已将其转换为字节:

Byte a = 10;
Byte b = 10;
因此,当我执行Refection时,我看到一个错误“找不到方法addNumber” 因为找不到输入中包含2字节的方法。我想这是意料之中的 2 Int32,而不是2字节

我怎样才能解决它

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);                        
        }
    }
}
这应该起作用:

public class Test1
{
    public Int32 addNumer (Int32 a, Int32 b)
    {
         return (a+b);
    }
}


static void Main (string[] args)
{
    Byte a = 10;
    Byte b = 20;

    object test = new Test1();

    //note how I cast a and b to int 
    //int is an alias to Int32

    typeof(Test1).GetMethod("addNumber").Invoke(test, 
                          new object[] { (int)a, (int)b }); 
}

用于将原始值更改为该方法接受的类型。如果找不到合适的转换,它将抛出异常。

在使用反射查找方法的位置添加代码。因此,您不知道
addNumber
的名称,并且希望查找它,因为它可以用2个字节调用。如果上面是“是”,则尝试获取具有2个相同参数的所有方法的列表,然后根据
进行过滤IsAssignableFrom
我不能这样做,因为我已经通过友好方式调用了getMethod,但我不知道键入了哪些参数。您知道要调用的函数的名称吗?这就解决了问题。谢谢
public class Test1
{
    public Int32 addNumer (Int32 a, Int32 b)
    {
         return (a+b);
    }
}


static void Main (string[] args)
{
    Byte a = 10;
    Byte b = 20;

    object test = new Test1();

    //note how I cast a and b to int 
    //int is an alias to Int32

    typeof(Test1).GetMethod("addNumber").Invoke(test, 
                          new object[] { (int)a, (int)b }); 
}