无法递归对象[],因为无法将对象转换为对象[]

时间:2017-08-27 00:11:30

标签: .net recursion c#-4.0

我正在尝试为对象[]创建深度反转。我使用类型检查来查看第一个对象中是否有另一个对象[],如果有,则递归到该数组中。当没有更多的对象[] s进入​​时,我们反转数组。这似乎可以解决整个问题,但是当我将对象[]传递给方法时,我会收到错误。

这是我的代码:

    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 []而不是更具体的东西。在这种情况下,我需要使用该类型。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

argArr是一个对象数组,因此argArr的每个元素都是一个对象。 因为你想将argArr的元素传递给deepReverse所以IDE会提示错误。在将argArr[i]传递给deepReverse

之前,您需要将Singleton转换为对象数组(object [])