Наводим порядок в System.Type.GetProperties()

Небольшая шпаргалка для тех кого не устраивает случайный порядок в массиве PropertyInfo который возвращает Type.GetProperties() .

Для этого нам понадобится класс атрибута


class OrderAttribute : Attribute
{
    public int Order { get; private set; }
    public OrderAttribute(int order)
    {
        Order = order;
    }
}

Статический метод сортировки

static class PropertyInfoUtils
{
    public static int PropertyOrder(this PropertyInfo propInfo)
    {        
        int output;
        var orderAttr = (OrderAttribute)propInfo
            .GetCustomAttributes(typeof(OrderAttribute), true)
            .SingleOrDefault();
        output = orderAttr != null ? orderAttr.Order : Int32.MaxValue;
        return output;
    }
}

Пометим поля соответствующим атрибутом..

...
[Order(1)]
public int prop_1;
[Order(2)]

public string prop_2;

[Order(3)]
public long prop_3;
...

И можно забирать данные любым удобным для вас способом

PropertyInfo[] property = ( from p in classtype.GetProperties()
    where p.CanWrite 
    orderby p.PropertyOrder() select p)
    .ToArray ();

или

public static int PropertyOrder(this Type type)
{
    return ( from p in type.GetProperties() 
        where p.CanWrite orderby p.PropertyOrder() select p)
        .ToArray ();
}

Удачи!

Комментарии