获取自定义类的成员以读取其值

时间:2017-04-27 08:56:53

标签: c# class class-members

我说我上课了:

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));                
        }

...问题是,在我的特定情况下,我需要首先获取所有类成员的列表,然后将它们过滤到属性和字段(当然忽略方法),然后像我在第一个示例中那样读取它们的值: / p>

        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()返回的课程MemberInfoPropertyInfo不同,FieldInfo不包含方法GetValue()。有没有办法从迭代通过MemberInfo集合的循环中读取过滤属性和字段成员的值?

3 个答案:

答案 0 :(得分:1)

在你的foreach-Loop尝试

foreach (var v in TC.GetType().GetMembers())
{
    if (v is PropertyInfo)
    {
       var value = ((PropertyInfo)v).GetValue(TC, null);
       TCValues.Add(value);
    }
    else if (v is FieldInfo)
    {
       var value = ((FieldInfo) v).GetValue(TC);
       TCValues.Add(value);
    }
}

答案 1 :(得分:0)

TC.GetType()。GetProperty(propName).GetValue(TC);

答案 2 :(得分:-1)

您必须将成员转换为正确的类型:

foreach (var v in TC.GetType().GetMembers())
{
    if (v.MemberType == System.Reflection.MemberTypes.Property)
    {
        TCValues.Add(((System.Reflection.PropertyInfo)v).GetValue(TC,null)); 
    }
    else if (v.MemberType == System.Reflection.MemberTypes.Field)
    {
        TCValues.Add(((System.Reflection.FieldInfo)v).GetValue(TC));
    }
}