对给定属性参数顺序的属性进行排序
本文关键字:属性 排序 参数 顺序 | 更新日期: 2023-09-27 18:06:30
我想根据给定的属性参数Order
对属性进行排序。
属性:
public class Items: Attribute
{
public int Order { get; set; }
public Items(int order)
{
this.Order = order;
}
}
实施:
public class client
{
[Items(1)]
public string fName {get; set;}
[Items(3)]
public string lName {get; set;}
[Items(2)]
public string mName {get; set;}
}
获取所有属性:
var properties = typeof(client).GetProperties().Where(
prop => prop.IsDefined(typeof(Items), false));
按订单号排序
这是我尝试过的,但它不起作用
Array.Sort(properties, delegate (Items x, Items y)
{ return x.Order.CompareTo(y.Order); });
如何根据订单对属性进行排序?
这个问题已经解决了,但我想扩大这个问题。
有没有一种方法可以对属性进行排序,而不必对它们进行"排序"。我只想有一个属性"EndOfList"或"Last",它会声明一定要将这些排序在最后。这样我就不必用Orders来打乱代码了。
您可以使用Linq和OrderBy
var sorted = properties
.OrderBy(p => ((Items)p.GetCustomAttributes(true)
.FirstOrDefault(a => a is Items)).Order);
这将按以下顺序产生:fName
、mName
、lName
。
那么OrderBy内部发生了什么:访问自定义属性。查找类型为Items
的第一个,并使用Order
属性作为排序参数。
要按相反的顺序排序,只需使用OrderByDescending
。
你可以试试这个
var properties = typeof(client).GetProperties().Where(prop => prop.IsDefined(typeof(Items), false));
var sortedProperties = properties.OrderBy(x => ((Items)x.GetCustomAttributes(typeof(Items), false).FirstOrDefault()).Order);