I can't find a way of copying n-depth jagged array by value (not by reference).
Here's the code i wrote for copying jagged array of depth 3:
    public static T[][][] Clone_Arr<T>(T[][][] arr)
    {
        int length1 = arr.Length;
        T[][][] arr2 = new T[length1][][];
        for (int i = 0; i < length1; i++)
        {
            int length2 = arr[i].Length;
            arr2[i] = new T[length2][];
            for (int j = 0; j < length2; j++)
            {
                int length3 = arr[i][j].Length;
                arr2[i][j] = new T[length3];
                for (int k = 0; k < length3; k++)
                {
                    arr2[i][j][k] = arr[i][j][k];
                }
            }
        }
        return arr2;
    }
But I just can't figure out how to write a general func that will make a copy of a jagged array of n-depth.
Any help will be appriciated
I tried doing the following:
    public static T[] Clone_Arr<T>(T[] arr)
    {
        int length = arr.Length;
        T[] arr2 = new T[length];
        if (arr.GetType().GetElementType().IsArray)
        {
            for (int i = 0; i < length; i++)
            {
                arr2[i] = Clone_Arr<T>(arr[i]);
                // here i encounter a compilation error: cannot convert from T to T[]
            }
        }
        else
        {
            for (int i = 0; i < length; i++)
            {
                arr2[i] = arr[i];
            }
        }          
        return arr2;
    }
