private static void CopyFromJaggedToMultidimensionalArray(IList values, Array multidimensionalArray, int[] indices) { int length = (int)indices.Length; if (length == multidimensionalArray.Rank) { multidimensionalArray.SetValue(CollectionUtils.JaggedArrayGetValue(values, indices), indices); return; } int num = multidimensionalArray.GetLength(length); if (((IList)CollectionUtils.JaggedArrayGetValue(values, indices)).Count != num) { throw new Exception("Cannot deserialize non-cubical array as multidimensional array."); } int[] numArray = new int[length + 1]; for (int i = 0; i < length; i++) { numArray[i] = indices[i]; } for (int j = 0; j < multidimensionalArray.GetLength(length); j++) { numArray[length] = j; CollectionUtils.CopyFromJaggedToMultidimensionalArray(values, multidimensionalArray, numArray); } }
private static void CopyFromJaggedToMultidimensionalArray(IList values, Array multidimensionalArray, int[] indices) { int num = indices.Length; if (num == multidimensionalArray.Rank) { multidimensionalArray.SetValue(CollectionUtils.JaggedArrayGetValue(values, indices), indices); return; } int length = multidimensionalArray.GetLength(num); IList list = (IList)CollectionUtils.JaggedArrayGetValue(values, indices); int count = list.Count; if (count != length) { throw new Exception("Cannot deserialize non-cubical array as multidimensional array."); } int[] array = new int[num + 1]; for (int i = 0; i < num; i++) { array[i] = indices[i]; } for (int j = 0; j < multidimensionalArray.GetLength(num); j++) { array[num] = j; CollectionUtils.CopyFromJaggedToMultidimensionalArray(values, multidimensionalArray, array); } }
private static void CopyFromJaggedToMultidimensionalArray( IList values, Array multidimensionalArray, int[] indices) { int length1 = indices.Length; if (length1 == multidimensionalArray.Rank) { multidimensionalArray.SetValue(CollectionUtils.JaggedArrayGetValue(values, indices), indices); } else { int length2 = multidimensionalArray.GetLength(length1); if (((ICollection)CollectionUtils.JaggedArrayGetValue(values, indices)).Count != length2) { throw new Exception("Cannot deserialize non-cubical array as multidimensional array."); } int[] indices1 = new int[length1 + 1]; for (int index = 0; index < length1; ++index) { indices1[index] = indices[index]; } for (int index = 0; index < multidimensionalArray.GetLength(length1); ++index) { indices1[length1] = index; CollectionUtils.CopyFromJaggedToMultidimensionalArray(values, multidimensionalArray, indices1); } } }
public static Array ToMultidimensionalArray(IList values, Type type, int rank) { IList <int> dimensions = CollectionUtils.GetDimensions(values, rank); while (dimensions.Count < rank) { dimensions.Add(0); } Array arrays = Array.CreateInstance(type, dimensions.ToArray <int>()); CollectionUtils.CopyFromJaggedToMultidimensionalArray(values, arrays, CollectionUtils.ArrayEmpty <int>()); return(arrays); }
public static Array ToMultidimensionalArray(IList values, Type type, int rank) { IList <int> dimensions = CollectionUtils.GetDimensions(values); while (dimensions.get_Count() < rank) { dimensions.Add(0); } Array array = Array.CreateInstance(type, Enumerable.ToArray <int>(dimensions)); CollectionUtils.CopyFromJaggedToMultidimensionalArray(values, array, new int[0]); return(array); }