【问题标题】:Object of type 'MyClass' cannot be converted to type 'System.Object[]' C#'MyClass' 类型的对象无法转换为'System.Object []' C# 类型
【发布时间】:2020-08-13 22:11:18
【问题描述】:

我已经研究了几个小时,但到目前为止还没有运气。 这是我的 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 变量转换为对象似乎是一个问题,这对我来说没有意义,因为我相信一切在 C# 中继承自 System.Object。

这是我的班级:

public class MyClass 
{
    public string var1;
    public int var2;

    public MyClass(string param1, int param2) 
    {
        var1 = param1;
        var2 = param2;
    }
}

很明显,我没有展示整个类,但唯一的区别是要存储更多的变量和参数。这些不应该改变任何东西,所以我不会让你厌烦它们。它只是一个带有构造函数的类,不继承任何东西。 对此我能得到的任何帮助将不胜感激。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 只是指出,即使这是真的“C#中的所有东西都继承自 System.Object”,也不会匹配 System.Object[](注意数组 [])
  • 对不起,如果我是愚蠢的;我不会编写太多 C# 代码。在第二行删除new object[1] 并在myClassInstance 之前添加类型转换(object) 会起作用吗?
  • 别担心,这里没有人是愚蠢的 ^^ 有了这段代码,我很难判断它是否适用于这些更改。但是你的错误是关于 SystemController,我在你的帖子中看不到:S

标签: unity3d exception reflection methodinfo


【解决方案1】:

这里的错误是我试图将整个 object[] 数组作为参数传递到我的方法中,而我应该只传递数组的内容。见这里:

我正在这样做:

void MyMethod(object[] args) {
    MyClass instance = (MyClass)args[0];
    ...
}

但应该这样做:

void MyMethod(MyClass myClassInstance) {
    ...
}

在阅读了更多文档并查看了上面的 cmets 之后,我发现 .Invoke() 方法传递了 args 数组内部的内容,而不是整个数组。至少,这是我目前的理解,也是我的代码工作的原因。 感谢您的帮助。

【讨论】:

  • 是的,参数是一一传递的。例如。 object[]{"hi", 4, List<float>{1,2,3}} 会期待 MyMethod(string, int, List<float>) 的签名
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多