2

我想遍历我的类的属性并获取每个属性类型。我大部分都得到了它,但是当尝试获取类型时,我得到了类型反射,而不是获取字符串、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
    .
    .
    .
 }
4

3 回答 3

14

首先,你不能prop.GetType()在这里使用——这是PropertyInfo的类型——你的意思是prop.PropertyType.

其次,尝试:

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

无论它是可空的还是不可空的,这都会起作用,因为null如果不是,GetUnderlyingType 将返回Nullable<T>

然后,在那之后:

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

或替代方案:

switch(Type.GetTypeCode(type)) {
    case TypeCode.Int32: /* ... */ break;
    case TypeCode.String: /* ... */ break;
    ...
}
于 2012-06-07T21:03:54.410 回答
3

您快到了。该类PropertyInfo有一个属性PropertyType,它返回属性的类型。当您调用实例时GetType()PropertyInfo您实际上只是得到了RuntimePropertyInfo您正在反映的成员的类型。

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

于 2012-06-07T21:02:58.847 回答
1

使用 PropertyType 属性。

http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.propertytype

于 2012-06-07T21:03:49.183 回答