首页新闻找找看学习计划

请列举一种Array as Object[] 为null的情况

0
[已解决问题] 解决于 2017-07-06 10:47

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中没有提供自动装箱。

给我一个理由的主页 给我一个理由 | 初学一级 | 园豆:17
提问于:2017-07-06 07:07
< >
分享
最佳答案
0

因为你穿过了的array 不是 Object[]

as 运算符是 直接继承才可以转换 比如  int[] 是不能转换为 Object[] ,它们是同级的。  int[] 可以隐身转换为 Array

奖励园豆:5
慧☆星 | 大侠五级 |园豆:5384 | 2017-07-06 09:28

是的我明白了你的意思,但是解释的并不太好

你帮我找到了症结所在,Array 和int[] 的区别

通过这个我修改了搜素引擎的搜索条件,找到了stackoverflow

why int[] can't cast to object[]?

给我一个理由 | 园豆:17 (初学一级) | 2017-07-06 10:33
其他回答(1)
0

array 是个什么东西?是一个Array对象吗?  他是个null吗?

ChixTech | 园豆:171 (初学一级) | 2017-07-06 09:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册