我有两个非常简单的方法,其中一个我可以调用,另一个给我找不到异常,这里是方法:
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);
你能告诉我什么是我的错误吗?
答案 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