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;
}
}
GenericList
实现了非GenericIEnumerable
,因此您可以将List对象强制转换为IEnumerable
,以对其进行迭代
请注意,我更改了以反映此
private static List<SomePrivateClassInsideIt> ReflectThis
=> new List<SomePrivateClassInsideIt>();
Generic
List
实现非GenericIEnumerable
,因此您可以将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 });
}
}
}