我有一个类型为object
的{{1}}(即Array
返回true)。我的问题是如何才能知道它是锯齿状还是多维数组?有没有办法序列化数组,以便代码“不知道”差异(使用反射)?
请注意,该数组具有任意长度/尺寸。我想我可以解析object.GetType().IsArray
来搜索Type.Name
(如[,
的一部分)或[,,]
来区分这些 - 但这仍然意味着我将为每个案例提供两个代码路径,我觉得应该有一个更好的方法来解决类型名称。
对于锯齿状数组,看起来很容易取出数组,然后使用[][]
对其进行索引以迭代所有元素,但是,这种方法不适用于多维数组。
答案 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属性查找多维数组的维数。