如何遍历我的类属性并获取其类型?

时间:2012-06-07 21:01:45

标签: c# class reflection properties

我想遍历我的类的属性并获取每个属性类型。我大部分时间都得到了它,但是在尝试获取类型时,而不是获取字符串,int等,我得到类型反射。有任何想法吗?如果需要更多背景信息,请与我们联系。谢谢!

using System.Reflection;

Type oClassType = this.GetType(); //I'm calling this inside the class
PropertyInfo[] oClassProperties = oClassType.GetProperties();

foreach (PropertyInfo prop in oClassProperties)  //Loop thru properties works fine
{
    if (Nullable.GetUnderlyingType(prop.GetType()) == typeof(int))
        //should be integer type but prop.GetType() returns System.Reflection
    else if (Nullable.GetUnderlyingType(prop.GetType()) == typeof(string))
        //should be string type but prop.GetType() returns System.Reflection
    .
    .
    .
 }

3 个答案:

答案 0 :(得分:13)

首先,您不能在此处使用prop.GetType() - 这是PropertyInfo 的类型 - 您的意思是prop.PropertyType

其次,试试:

var type = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;

这将是可以为空的不可为空,因为如果GetUnderlyingType不是null,它将返回Nullable<T>

然后,在那之后:

if(type == typeof(int)) {...}
else if(type == typeof(string)) {...}

或替代方案:

switch(Type.GetTypeCode(type)) {
    case TypeCode.Int32: /* ... */ break;
    case TypeCode.String: /* ... */ break;
    ...
}

答案 1 :(得分:3)

你快到了。 PropertyInfo类有一个属性PropertyType,它返回属性的类型。当您在GetType()实例上致电PropertyInfo时,您实际上只是获得了RuntimePropertyInfo,这是您要反思的成员的类型。

因此,要获取所有成员属性的类型,您只需执行以下操作: oClassType.GetProperties().Select(p => p.PropertyType)

答案 2 :(得分:1)