我正在尝试为对象[]创建深度反转。我使用类型检查来查看第一个对象中是否有另一个对象[],如果有,则递归到该数组中。当没有更多的对象[] 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 []而不是更具体的东西。在这种情况下,我需要使用该类型。
答案 0 :(得分:1)
编译器无法知道argArr [i]只是一个“对象”。你显然知道它是因为'if'条件分支。我认为你应该简单地转换函数参数:
deepReverse((object [])argArr[i]);
答案 1 :(得分:0)
argArr
是一个对象数组,因此argArr
的每个元素都是一个对象。
因为你想将argArr
的元素传递给deepReverse
所以IDE会提示错误。在将argArr[i]
传递给deepReverse
Singleton
转换为对象数组(object [])