none
Рефлексия массивов на C# RRS feed

  • Общие обсуждения

  • Приветствую!

    Как можно в общем виде работать с массивами через рефлексию?

    Например, дан такой объект:

    class TestClass
    {
    	public byte[] F1 { get; set; }
    	public byte[,] F2 { get; set; }
    	public byte[][][] F3 { get; set; }
    }
    

    Задача — можно сказать, что сериализация. Базовый тип System.Array, но непонятно как дальше с этим работать.

    23 марта 2020 г. 5:26

Все ответы

  • А что именно вы хотите реализовать? Пользуйтесь 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();
        }
    Обход произвольного многомерного массива, конечно реализовать посложнее, но суть будет та же - свести к массиву одномерных массивов и обойти рекурсивно.

    23 марта 2020 г. 7:32
  • Бинарный сериализатор. Решаем вопрос с массивами, вот и думаю как лучше сделать.
    23 марта 2020 г. 13:12