C# 访问从反射获取的私有类型列表的内容

C# 访问从反射获取的私有类型列表的内容,c#,C#,通过methodInfo.Invoke我得到了一个对象,它属于列表类型,我在尝试ToString对象时就知道了它 我想访问此对象中的数据。我无法转换到所述类的列表,因为该类是私有的,但我知道它的变量名。如何枚举此列表并访问其内容 public class ToBeReflected { private static List<SomePrivateClassInsideIt> ReflectThis => new List<SomePrivateClassInsi

通过
methodInfo.Invoke
我得到了一个
对象
,它属于
列表
类型,我在尝试
ToString
对象时就知道了它

我想访问此
对象中的数据
。我无法转换到所述类的列表,因为该类是私有的,但我知道它的变量名。如何枚举此列表并访问其内容

public class ToBeReflected
{
    private static List<SomePrivateClassInsideIt> ReflectThis => new List<SomePrivateClassInsideIt>();

    private class SomePrivateClassInsideIt
    {
        public readonly List<int> Ints;
        public int num1;
        public int num2;
    }
}
要反射的公共类
{
私有静态列表反映this=>newlist();
私有类一些私有类
{
公共只读列表INT;
公共int num1;
公共国际单位m2;
}
}

Generic
List
实现了非Generic
IEnumerable
,因此您可以将List对象强制转换为
IEnumerable
,以对其进行迭代

请注意,我更改了
以反映此

private static List<SomePrivateClassInsideIt> ReflectThis
    => new List<SomePrivateClassInsideIt>();

Generic
List
实现非Generic
IEnumerable
,因此您可以将List对象强制转换为
IEnumerable
,以对其进行迭代

请注意,我更改了
以反映此

private static List<SomePrivateClassInsideIt> ReflectThis
    => new List<SomePrivateClassInsideIt>();
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            object reflectThis = typeof(ToBeReflected).GetProperty("ReflectThis", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
            int objIndex = 0;
            foreach(object obj in (reflectThis as IEnumerable))
            {
                Type objType = obj.GetType();
                List<int> ints = (List<int>)objType.GetField("Ints", BindingFlags.Public | BindingFlags.Instance).GetValue(obj);
                int num1 = (int)objType.GetField("num1", BindingFlags.Public | BindingFlags.Instance).GetValue(obj);
                int num2 = (int)objType.GetField("num2", BindingFlags.Public | BindingFlags.Instance).GetValue(obj);
                Console.WriteLine("Object #" + objIndex);
                Console.WriteLine("  Ints: " + string.Join(",", ints));
                Console.WriteLine("  num1: " + num1);
                Console.WriteLine("  num2: " + num2);
                objIndex++;
            }
        }
    }

    public class ToBeReflected
    {
        private static List<SomePrivateClassInsideIt> ReflectThis { get; } = new List<SomePrivateClassInsideIt>();

        private class SomePrivateClassInsideIt
        {
            public readonly List<int> Ints;
            public int num1;
            public int num2;

            public SomePrivateClassInsideIt(List<int> ints)
            {
                Ints = ints;
            }
        }

        static ToBeReflected()
        {
            ReflectThis.Add(new SomePrivateClassInsideIt(new List<int> { 0, 1 }) { num1 = 2, num2 = 3 });
            ReflectThis.Add(new SomePrivateClassInsideIt(new List<int> { 4, 5 }) { num1 = 6, num2 = 7 });
        }
    }
}