2016-03-15 110 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,使代码更短。

相关问题