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