繁体   English   中英

typeof(int [] [])。GetArrayRank()的值为1

[英]Value of typeof(int[][]).GetArrayRank() is 1

为什么typeof(int[][]).GetArrayRank() = 1 ,以及如何通过反射创建为锯齿状数组?

typeof(int[][]).GetArrayRank();//1. 

锯齿状数组( int[][] )与多维数组( int[,] )不同:

var jagged = typeof(int[][]);
var multiDimensional = typeof(int[,]);

Console.WriteLine("Jagged: " + jagged.GetArrayRank()); // 1
Console.WriteLine("Multidimensional: " + multiDimensional.GetArrayRank()); // 2

要使用反射创建锯齿状的数组,必须从以下资源中将其拼凑在一起:

首先获取类型信息:

var typeOfInt = typeof(int);
var typeOfIntArray = typeOfInt.MakeArrayType();
var typeOfArrayOfIntArrays = typeOfIntArray.MakeArrayType();

Console.WriteLine(typeOfArrayOfIntArrays); // System.Int32[][]

然后实例化并填充它:

// The root array has one element
var arrayOfIntArrays = (Array)Activator.CreateInstance(typeOfArrayOfIntArrays, 1);
// The inner array has two elements
var intArray = (Array)Activator.CreateInstance(typeOfIntArray, 2);

intArray.SetValue(42, 0);
intArray.SetValue(21, 1);

arrayOfIntArrays.SetValue(intArray, 0);

foreach (Array arr in arrayOfIntArrays)
{
    foreach (var value in arr)
    {
        Console.WriteLine(value);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM