我需要读取其名称传递给my方法的成员(可能是字段或属性)的值。这是我检索MemberInfo的方法:
MemberInfo member = itemType.GetField(fieldName) as MemberInfo ?? itemType.GetProperty(fieldName) as MemberInfo;
接下来,我想检查已找到的成员(字段/属性)的类型。这样做的正确方法是什么?
答案 0 :(得分:1)
如果| year | month | day | manana | tarde | noche | valor_medida | Score_recogida |
|------|-------|-----|--------|-------|-------|--------------|----------------|
| 2015 | 4 | 18 | 1 | 0 | 0 | 25.0 | 8.166667 |
| 2015 | 4 | 18 | 0 | 0 | 1 | 47.5 | 0.000000 |
| 2015 | 4 | 18 | 0 | 1 | 0 | 20.0 | 0.000000 |
PropertyType
或PropertyInfo
的{{1}}属性
FieldType
答案 1 :(得分:1)
var myProp = type.GetField(fieldName) ...;
var type = myProp.MemberType;
编辑:要获取属性字段的数据类型,您还要区分属性和字段:
var type = (myProp is PropertyInfo ?)
(pyProp as PropertyInfo).PropertyType) :
(myProp as FieldInfo).FieldType);
答案 2 :(得分:1)
您可以分别从字段和属性的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
并使代码更短。