我希望根据给定的属性参数Order对属性进行排序。
属性:
public class Items: Attribute
{
public int Order { get; set; }
public Items(int order)
{
this.Order = order;
}
}Implementation:
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));按Order#?排序
这是我试过的,但不起作用
Array.Sort(properties, delegate (Items x, Items y)
{ return x.Order.CompareTo(y.Order); });如何根据订单对属性进行排序?
这一问题已得到解决,但希望扩大这一问题。
Is there a way to sort properties without having to put an "Order" on them。我只想拥有一个属性"EndOfList“或" last”,它将声明一定要对这些属性进行排序。这样我就不用把代码和订单弄得乱七八糟了。
发布于 2016-09-10 02:01:05
您可以使用Linq和OrderBy
var sorted = properties
.OrderBy(p => ((Items)p.GetCustomAttributes(true)
.FirstOrDefault(a => a is Items)).Order);结果如下:fName、mName、lName。
那么在OrderBy内部发生了什么:访问自定义属性。首先查找类型为Items的Order属性,并将其用作排序参数。
要按相反的顺序排序,只需使用OrderByDescending。
发布于 2016-09-10 02:24:37
你可以试试这个
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);https://stackoverflow.com/questions/39421705
复制相似问题