如何使用反射递归获取类型的属性?

时间:2016-09-10 15:37:39

标签: c#

我需要以递归方式获取对象的所有DateTime属性。

目前我正在做:

public static void GetDates(this object value)
{
    var properties = value.GetType().GetProperties();

    foreach (var property in properties)
    {
        if (property.GetType().IsClass)
        {
            property.SetDatesToUtc();
        }
        else
        {
            if (property.GetType() == typeof(DateTime))
            {
                //Do something...
            }
        }
    }
}

但是,使用property.GetType().IsClass是不够的,因为偶数字符串或日期属性都是类。

有没有办法获得属于实际类的属性?

如果我向具有DateTime属性的类添加接口,然后检查该属性是否实现了该接口,会不会更好?

2 个答案:

答案 0 :(得分:1)

你走在正确的轨道上,但我认为你的逻辑有点逆转。您应该更改日期时间,并在其他所有方面运行相同的方法:

(3, 4, 4)

答案 1 :(得分:0)

我为具有DateTime属性的类添加了一个接口。所以方法改为:

public static void GetDates(this object value)
{
    var properties = value.GetType().GetProperties();
    foreach (var property in properties)
    {
        if (typeof(IHasDateProperty).IsAssignableFrom(property.PropertyType))
        {
            property.SetDatesToUtc();
        }
        else
        {
            if (property.GetType() == typeof(DateTime))
            {
                //Do something...
            }
        }
    }
}