如何遍历我的类属性并获取它们的类型

本文关键字:获取 类型 属性 何遍历 遍历 我的 | 更新日期: 2023-09-27 18:36:41

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

如何遍历我的类属性并获取它们的类型

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

其次,尝试:

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

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

然后,在那之后:

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

或替代方案:

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

你快到了。 PropertyInfo类具有返回属性类型的属性PropertyType。 当您在PropertyInfo实例上调用GetType()时,您实际上只是在获取RuntimePropertyInfo这是您正在反思的成员类型。

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

使用 PropertyType 属性。

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