3

我有一个object类型Array(即object.GetType().IsArray返回真)。我的问题是如何确定它是锯齿状数组还是多维数组?有没有办法序列化数组,以便代码“不知道”差异(使用反射)?

请注意,该数组具有任意长度/维度。我在想我也许可以解析Type.Name来搜索[,(如在其中的一部分[,,])或[][]区分这些——但这仍然意味着我将为每种情况提供两个代码路径,我觉得应该有更好的方法完成这个比解析类型名称。

对于锯齿状数组,获取数组然后继续索引它[]以迭代所有元素似乎很容易,但是,这种方法不适用于多维数组。

4

1 回答 1

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));
    }

转换为 Array 并使用 Rank 属性查找多维数组的维数。

于 2013-05-10T11:54:44.740 回答