2016-03-15 111 views
0

我需要讀取其名稱傳遞給我的方法的成員(它可能是一個字段或屬性)的值。這是我如何檢索MemberInfo:如何通過反射獲得成員的類型?

MemberInfo member = itemType.GetField(fieldName) as MemberInfo ?? itemType.GetProperty(fieldName) as MemberInfo; 

接下來,我想檢查已找到的成員(字段/屬性)的類型。什麼是正確的方法來做到這一點?

回答

1

你可以,如果FieldInfo

MemberInfo member = itemType.GetField(fieldName) as MemberInfo ?? itemType.GetProperty(fieldName) as MemberInfo; 
Type type = member is PropertyInfo ? ((PropertyInfo)member).PropertyType : ((FieldInfo)member).FieldType; 
+0

實際上,MemberType返回成員是字段,屬性還是方法......我需要獲取返回字段或屬性的類型(int,string ...),因爲我確定它是場或財產。 – Simone

+0

所以你確認沒有辦法直接從'MemberInfo'中取出它?不是我覺得它太奇怪了,因爲'MemberInfo'可能指的是很多不同的實體... – Simone

+0

@Simone不,沒有辦法。 'MemberInfo'用於其他目的,不會有類型...有一個類型是特定的字段和屬性 – Jcl

1

使用PropertyInfoFieldTypePropertyType財產使用MemberInfo.MemberType

var myProp = type.GetField(fieldName) ...; 
var type = myProp.MemberType; 

編輯:若要獲取的數據類型,你必須也區分屬性字段屬性和字段:

var type = (myProp is PropertyInfo ?) 
    (pyProp as PropertyInfo).PropertyType) : 
    (myProp as FieldInfo).FieldType); 
+0

實際上,MemberType返回成員是字段,屬性還是方法...我需要獲取鍵入(int,string ...)返回的字段或屬性,因爲我確定它是一個字段或一個屬性。 – Simone

+0

所以你確認沒有辦法直接從'MemberInfo'中取出它?不是我覺得它太奇怪了,因爲'MemberInfo'可能指的是很多不同的實體... – Simone

+0

我看不到任何方法來源於MethodInfo。然而,這很清楚,因爲'MemberInfo'也可以表示方法和委託。那麼在這種情況下,這樣的成員應該返回什麼?返回值?參數列表? – HimBromBeere

1

您可以分別從FieldTypePropertyType屬性中獲取此信息,但不能(容易地)從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,使代碼更短。

相關問題