调用一个以类实例作为输入Arg的方法

时间:2012-12-23 15:38:37

标签: c# c#-4.0

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

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);
你能告诉我什么是我的错误吗?

1 个答案:

答案 0 :(得分: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