无法将类型为“ MyClass”的对象转换为类型为“ System.Object []”的C#

问题描述

我已经研究了几个小时,但到目前为止还没有任何运气。 这是我的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数组,而不是整个数组。至少,这是我目前的理解,也是使我的代码正常工作的原因。 感谢您的帮助。