using System.Collections.Generic;
namespace FlattenArrayExample
public static class Program
public static void Main()
#region jagged array sample
jaggedArray = new int[3][];
jaggedArray[0] = new int[1];
jaggedArray[1] = new int[2];
jaggedArray[2] = new int[3];
#endregion jagged array sample
#region nested array sample
nestedArray = new object[3][];
nestedArray[0] = new object[1];
nestedArray[1] = new object[2];
nestedArray[2] = new object[3];
nestedArray[0][0] = new object[] { 4,5,6, new object[3] { 6,7,8} };
#endregion nested array sample
var flattenedArray = ArrayUtils.GetFlattenedIntArray(nestedArray);
if (flattenedArray != null)
var flattenedArraySerialized = new StringBuilder();
foreach (var el in flattenedArray)
flattenedArraySerialized.Append(string.Format("{0},",el));
Console.WriteLine(string.Format("flattened array -> [{0}]", flattenedArraySerialized));
public static class ArrayUtils
public static int[] GetFlattenedIntArray(object jaggedArray)
var flattenedArray = new List<int>();
var jaggedArrayType = jaggedArray.GetType();
var expectedType = typeof(int);
if (jaggedArrayType.IsArray)
if (expectedType.IsAssignableFrom(jaggedArrayType.GetElementType()))
foreach (var el in jaggedArray as int[])
foreach (var el in jaggedArray as object[])
foreach (var retIntEl in GetFlattenedIntArray(el))
flattenedArray.Add(retIntEl);
else if (jaggedArrayType == expectedType)
flattenedArray.Add((int)jaggedArray);
return flattenedArray.ToArray();