2017-08-27 79 views
0

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

这里是我的代码: '对象[]'

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 [1])我得到一个错误“无法从 '对象' 转换为

我不明白这一点,因为这是typecheck所做的事情,if语句正在检查以确保索引确实持有'object []'。如果它找到索引来保存一个'object []'怎么来我不能将它作为一个对象传递[]?

这是一个帮助别的东西的小帮助方法,这就是为什么我使用object []而不是更具体的东西,在这种情况下,我需要使用那种类型。

回答

1

编译器没有办法知道argArr [i]只是一个'object',你显然知道它是因为。在“如果”条件分支我认为你应该简单的投功能参数:

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

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