序列化锯齿与多维数组

时间:2013-05-10 05:18:15

标签: c# reflection multidimensional-array jagged-arrays

我有一个类型为object的{​​{1}}(即Array返回true)。我的问题是如何才能知道它是锯齿状还是多维数组?有没有办法序列化数组,以便代码“不知道”差异(使用反射)?

请注意,该数组具有任意长度/尺寸。我想我可以解析object.GetType().IsArray来搜索Type.Name(如[,的一部分)或[,,]来区分这些 - 但这仍然意味着我将为每个案例提供两个代码路径,我觉得应该有一个更好的方法来解决类型名称。

对于锯齿状数组,看起来很容易取出数组,然后使用[][]对其进行索引以迭代所有元素,但是,这种方法不适用于多维数组。

1 个答案:

答案 0 :(得分:2)

锯齿状数组是一个数组数组。所以你要做的就是查看元素类型并检查它是否也是一个数组:

    static bool IsJaggedArray(object obj) {
        var t = obj.GetType();
        return t.IsArray && t.GetElementType().IsArray;
    }

    static void Test() {
        var a1 = new int[42];
        Debug.Assert(!IsJaggedArray(a1));
        var a2 = new int[4, 2];
        Debug.Assert(!IsJaggedArray(a2));
        var a3 = new int[42][];
        Debug.Assert(IsJaggedArray(a3));
    }

Cast to Array并使用Rank属性查找多维数组的维数。

相关问题