问题描述
我已经研究了几个小时,但到目前为止还没有任何运气。 这是我的C#代码:
myClassInstance = new MyClass("MyParam",1);
object[] args = new object[1] { myClassInstance };
MethodInfo methodInfo = GetType().getmethod(myMethod,BindingFlags.NonPublic | BindingFlags.Instance);
string method = (string)methodInfo.Invoke(this,args);
我已导入MethodInfo和System.Reflection。 Unity错误是这样的:
ArgumentException: Object of type 'SystemController' cannot be converted to type 'System.Object[]'
它没有指向代码中的特定行,但是据我所知,这似乎是将myClassInstance变量转换为对象的问题,这对我来说没有意义,因为我相信一切从System.Object继承的C#中。
这是MyClass:
public class MyClass
{
public string var1;
public int var2;
public MyClass(string param1,int param2)
{
var1 = param1;
var2 = param2;
}
}
很明显,我没有显示整个类,但是唯一的区别是要存储更多的变量和参数。这些不应该改变任何东西,所以我不会让您感到厌烦。它只是一个带有构造函数的类,而不继承任何东西。 我将获得的任何帮助将不胜感激。让我知道您是否需要更多信息。
解决方法
这里的错误是当我只应该传递数组的内容时,我试图将整个object []数组作为参数传递给我的方法。看到这里:
我正在这样做:
void MyMethod(object[] args) {
MyClass instance = (MyClass)args[0];
...
}
但是应该这样做:
void MyMethod(MyClass myClassInstance) {
...
}
在阅读了更多文档并查看了上面的评论之后,我发现.Invoke()方法将args数组中的内部传递给了args数组,而不是整个数组。至少,这是我目前的理解,也是使我的代码正常工作的原因。 感谢您的帮助。