你的建議是可行的。
創建一個屬性:
public class OrderAttribute : Attribute
{
public int Order { get; private set; }
public OrderAttribute(int order)
{
Order = order;
}
}
然後在您的通話排序依據通過反射得到OrderAttribute.Order領域也。 將它放在自己的方法中或在PropertyInfo上創建擴展方法可能會更好。
所以它應該是這樣的:
MemberInfo[] myMembers = myType.GetMembers()
.OrderBy(m => m.GetAttribute<OrderAttribute>().Order);
我創建了一個通用的擴展方法來處理屬性檢索。
public static TAttribute GetAttribute<TAttribute>(this object obj)
where TAttribute : Attribute
{
return obj.GetType().GetAttribute<TAttribute>();
}
public static TAttribute GetAttribute<TAttribute>(this ICustomAttributeProvider propInfo, bool inherit = true)
where TAttribute : Attribute
{
return (TAttribute)propInfo.GetCustomAttributes(typeof(TAttribute), inherit).FirstOrDefault();
}
你已經有了一個可能的'NullReferenceException'那裏,如果其中一個成員沒有一個'OrderAttribute' – tvanfosson
謝謝,我只是添加註釋關於你的評論! –
@MartinBooth,謝謝,這正是我想要的。 –