[英]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.