我有这样一门课:
internal class MyClass
{
string name { get; set; }
List<MyClass2> myClass2 { get; set; }
}
其中MyClass2
:
internal MyClass2
{
string field1 { get; set; }
string field2 { get; set; }
int field3 { get; set; }
long field4 { get; set; }
}
我想通过反射检索myClass2
的字段,所以我编写了以下代码片段:
Type objectType = typeof(MyClass);
IEnumerable<MemberInfo> members = objectType
.GetMembers(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(p => p.MemberType == MemberTypes.Property);
foreach (var field in members)
{
if (field.Name != "name")
{
var fieldT = field.GetType();
Console.WriteLine("Field: " + field.Name + "; Field type: " + typeof(Property));
Type propertiesType = field.GetType();
IEnumerable<MemberInfo> propertiesMembers = typeof(Property)
.GetMembers(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(p => p.MemberType == MemberTypes.Property);
foreach(var property in propertiesMembers)
{
Console.WriteLine("Looking for field: " + field.Name);
var value = fields.Where(f => f.Key == field.Name).First();
Console.WriteLine("Actual value receiver for: " + field.Name + " => " + value);
}
}
}
其中fields
只是一个Dictionary<string, dynamic>
,其中包含了问题的非有趣数据.
问题是我无法检索变量myClass2
中的字段,首先是因为它是一个集合,其次是因为在循环的fields
变量中,它将其类型确定为System.Reflection.RuntimePropertyInfo
.
如何修改我的代码以获得myClass2
内的字段集合,从而产生我正在寻找的真实数据?这只是MemberTypes.Property
的MemberTypes
的会员信息吗?
谢谢.