如何在不使用动态/反射的情况下,根据另一数组维度初始化非锯齿数组?
解决方案
可以使用.NET框架原生的Array.CreateInstance方法实现需求,这是专门用于创建数组的API,无需依赖动态特性或反射,能高效生成指定秩和各维度长度的规整矩形数组。
修改你的代码如下:
Array func(Array x) { int rank = x.Rank; int[] shape = new int[rank]; for(int i = 0; i < rank; i++) { shape[i] = x.GetLength(i); } // 创建指定元素类型、维度长度的矩形数组 Array ret = Array.CreateInstance(typeof(float), shape); // 后续处理逻辑示例:遍历赋值 for (int i = 0; i < ret.Length; i++) { ret.SetValue(0.0f, Array.IndexToMultiIndex(i, shape)); } return ret; }
关键说明
Array.CreateInstance第一个参数指定数组元素类型(这里是typeof(float)),第二个参数是整数数组,每个元素对应目标数组各维度的长度,数组的长度就是最终数组的秩。- 创建出的是标准矩形数组(如
float[,]、float[,,]等),而非锯齿数组,完全匹配你的需求。 - 访问或修改元素时,可使用
GetValue/SetValue方法;若已知目标数组的秩,也可将返回的Array强转为具体数组类型(如float[,])直接操作。
内容的提问来源于stack exchange,提问作者Lotramus
相关产品推荐
相关产品推荐

