[英]How do I get the type of a member through reflection?
我需要读取其名称传递给我的方法的成员(可能是字段或属性)的值。 这是我检索MemberInfo的方法:
MemberInfo member = itemType.GetField(fieldName) as MemberInfo ?? itemType.GetProperty(fieldName) as MemberInfo;
接下来,我想检查已找到的成员(字段/属性)的类型。 这样做的正确方法是什么?
如果是FieldInfo
您可以使用PropertyType
的PropertyInfo
或FieldType
MemberInfo member = itemType.GetField(fieldName) as MemberInfo ?? itemType.GetProperty(fieldName) as MemberInfo;
Type type = member is PropertyInfo ? ((PropertyInfo)member).PropertyType : ((FieldInfo)member).FieldType;
var myProp = type.GetField(fieldName) ...;
var type = myProp.MemberType;
编辑:要获取属性字段的数据类型,您还要区分属性和字段:
var type = (myProp is PropertyInfo ?)
(pyProp as PropertyInfo).PropertyType) :
(myProp as FieldInfo).FieldType);
您可以分别从字段和属性的FieldType
和PropertyType
属性获取此信息,但不能(轻松)从MemberInfo
本身获取。 这是编写代码的一种方式,它有利于代码清晰度,而不是在运行时执行不必要的任务而不是代码简洁。
void GetInfo(Type itemType, string fieldName) {
FieldInfo field = itemType.GetField(fieldName);
MemberInfo member;
Type memberType;
if (field != null) {
member = field;
memberType = field.FieldType;
} else {
PropertyInfo property = itemType.GetProperty(fieldName);
if (property != null) {
member = property;
memberType = property.PropertyType;
} else {
member = null;
memberType = null;
// or throw an exception
}
}
// do something with member and memberType
}
请注意,如果最后只需要memberType
,则可以完全删除member
并使代码更短。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.