1

我有两个非常简单的方法,其中一个我可以调用,另一个给我未找到的异常,这里是方法:

class SimClass
    {
        public int GeneralMethod1(int a)
        {
            return a;
        }

        public int GeneralMethod2(Input input)
        {
            return input.Numberi;
        }

    }
    class Input
    {
        public int Numberi { get; set; }
    }

我可以简单地调用“GeneralMethod1”:

        Assembly assembly = Assembly.LoadFrom("C:\\Amir\\SimFIle.dll");
        Type type = assembly.GetType("SimFIle.SimClass");
        object instanceOfMyType = Activator.CreateInstance(type);

        object[] Args1 = new object[1]; Args1[0] = -1;
        object result = type.InvokeMember("GeneralMethod1",
              BindingFlags.Default | BindingFlags.InvokeMethod,
                   null,
                   instanceOfMyType,
                   Args1);

但在调用“GeneralMethod2”时遇到问题:

    Input input = new Input { Numberi = -5};
    object[] Args2 = new object[1]; Args2[0] = input;
    object output = type.InvokeMember("GeneralMethod2",
          BindingFlags.Default | BindingFlags.InvokeMethod,
               null,
               instanceOfMyType,
               Args2);

你能告诉我我的错误是什么吗?

4

1 回答 1

2

我怀疑问题是你有一个不同的Input班级。您正在动态加载 SimFile.dll,但Input静态创建一个实例。这意味着Input您正在创建的类与您正在调用该方法的程序集中的类不同。

如果您的代码中已经对的引用SimFile.dll,则不应显式加载它——这只会使事情变得混乱。如果您在项目中没有引用SimFile.dll,那么大概您正在创建一个完全不同Input类型的实例。

无论哪种方式,您都应该能够通过使用Input动态加载程序集中的类来解决问题:

Type inputType = assembly.GetType("Input")
object input = Activator.CreateInstance(inputType);
inputType.GetProperty("Numberi").SetValue(input, -5);

// Rest of code as before
于 2012-12-23T15:51:13.437 回答