Ответы с форумов MSDN

Обход вложенных массивов в C#

Date: 23.03.2020 7:32:24

А что именно вы хотите реализовать? Пользуйтесь Array.Rank, Array.GetLengh, Array.Get(Set)Value и т.п.

Обход произвольного массива из вложенных друг в друга одномерных массивов например можно так реализовать:

    static void PrintArrItem(Array arr, int index)
    {
        Type t = arr.GetType();
        if (t.GetElementType().IsArray)
        {
            Array inner = (Array)arr.GetValue(index);
            Console.Write("[");
            for (int i = 0; i < inner.GetLength(0); i++)
            {
                if(i>=1) Console.Write(",");
                PrintArrItem(inner, i);                
            }
            Console.Write("]");
        }
        else
        {
            Console.Write(arr.GetValue(index));
        } 
    }

    static void Main(string[] args)
    {
        TestClass test = new TestClass();
        test.F3 = new byte[][][] {
            new byte[][] { new byte[] { 1,2 } },
            new byte[][] { new byte[] { 3,4 },new byte[] { 5 } }
        };

        PropertyInfo pi = typeof(TestClass).GetProperty("F3");
        Array arr = (Array)pi.GetValue(test);

        for (int i=0; i < arr.GetLength(0); i++)
        {
            if (i >= 1) Console.Write(",");
            PrintArrItem(arr, i);
        }
        
        Console.ReadKey();
    }
Обход произвольного многомерного массива, конечно реализовать посложнее, но суть будет та же - свести к массиву одномерных массивов и обойти рекурсивно.


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub