【问题标题】:Cannot recurse over object[] because cannot convert object to object[]无法递归 object[],因为无法将 object 转换为 object[]
【发布时间】:2017-08-27 00:11:30
【问题描述】:

我正在尝试为对象 [] 创建一个深度反转。我使用类型检查来查看第一个对象内是否还有另一个 object[],如果有,则递归到该数组中。当没有更多的 object[] 进入时,我们反转数组。这似乎可以扭转整个事情,但是当我将 object[] 传递给找到的方法时出现错误。

这是我的代码:

    private static void deepReverse(object[] argArr)
    {
        for(var i = 0; i < argArr.Length; i++)
        {
            if (argArr[i].GetType() == typeof(object[]))
            {
                deepReverse(argArr[i]);
            }
        }
        Array.Reverse(argArr);
    }

在 deepReverse(argArr[i]) 处出现错误“无法从 'object' 转换为 'object[]。'

我不明白这一点,因为这是类型检查所做的。 if 语句正在检查以确保索引确实包含“对象 []”。如果它发现该索引包含一个“object[]”,我为什么不能将它作为 object[] 传递?

这是一个小的辅助方法来帮助处理其他事情,这就是我使用 object[] 而不是更具体的东西的原因。在这种情况下,我需要使用该类型。

【问题讨论】:

    标签: .net recursion c#-4.0


    【解决方案1】:

    编译器无法知道 argArr[i] 只是一个“对象”。您显然知道它是因为“if”条件分支。我认为你应该简单地转换函数参数:

     deepReverse((object [])argArr[i]);
    

    【讨论】:

      【解决方案2】:

      argArr 是一个对象数组,所以argArr 的每个元素都是一个对象。 因为您想将argArr 的元素传递给deepReverse,所以IDE 会警告错误。您需要先将argArr[i] 转换为对象数组(object[]),然后再将其传递给deepReverse

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2010-12-05
        相关资源
        最近更新 更多