public static void Reverse(Array array, int index, int length)
{
if (array == null) //这里过滤了null
throw new ArgumentNullException("array");
Object[] objArray = array as Object[]; // 我想不到这里为null是什么情况,有谁能给个case,并说明下原因
if (objArray != null)
{
while (i < j)
{
Object temp = objArray[i];
objArray[i] = objArray[j];
objArray[j] = temp;
i++;
j--;
}
}
else
{
while (i < j)
{
Object temp = array.GetValue(i);
array.SetValue(array.GetValue(j), i);
array.SetValue(temp, j);
i++;
j--;
}
}
}
最终我认为的答案应该是
在数组不能自动装箱所以会导致 实际为int[] 类型的Array实例转化为Object[] 时为null
Int32[] arr8 = new Int32[] { 1, 2, 3, 4, 5 };
Object[] a = arr8 as Object[]; //这里默认是编译不过去的
Array arr9= new Int32[]{1,2,3,4,5};
a = arr9 as Object[]; // 这里虽然可以编译通过,但是得到是null
总是就是Array中没有提供自动装箱。
因为你穿过了的array 不是 Object[]
as 运算符是 直接继承才可以转换 比如 int[] 是不能转换为 Object[] ,它们是同级的。 int[] 可以隐身转换为 Array
是的我明白了你的意思,但是解释的并不太好
你帮我找到了症结所在,Array 和int[] 的区别
通过这个我修改了搜素引擎的搜索条件,找到了stackoverflow
array 是个什么东西?是一个Array对象吗? 他是个null吗?