让说我有类:获取自定义类的成员读取它们的值
public class TestClass
{
public string Prop1 { get; set; }
public int Field1 = 1234567890;
public string Method1() { return "ABCDEFGHIJKLMNOPQRSTUVXYZ"; }
}
...类的实例和列表:
TestClass TC = new TestClass();
List<object> TCValues = new List<object>();
...并填充与值列表循环:
foreach (var v in TC.GetType().GetProperties()) // or .GetFields()
{
TCValues.Add(v.GetValue(TC, null));
}
...问题是,在我的具体情况我需要首先获得所有类成员的名单,然后将其过滤属性和域(忽略过程的方法),然后当我在第一个例子读它们的值:
foreach (var v in TC.GetType().GetMembers())
{
if (v.MemberType == System.Reflection.MemberTypes.Property || v.MemberType == System.Reflection.MemberTypes.Field)
{
TCValues.Add(v.?????????); // Can't get values !
}
}
...我明白GetMembers()
收益类MemberInfo
它不像PropertyInfo
和FieldInfo
不含方法GetValue()
。有没有什么方法可以通过循环访问MemberInfo
集合来读取循环内的过滤属性和字段成员的值?
感谢。所以如果我理解得当,'MemberInfo'是'PropertyInfo'和'FieldInfo'的基础。我看不到'GetValue()',因为'MemberInfo'没有指向它,所以我需要将它转换为f.e. 'FieldInfo'来查看'GetValue()'方法。 – cembo
是的,MemberInfo是PropertyInfo和FieldInfo的基类。但它不公开GetValue(),因为实现和签名对于属性和字段是不同的。 – MiGro