Наводим порядок в 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 ();
}

Удачи!

Комментарии