首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定属性参数顺序的排序属性

给定属性参数顺序的排序属性
EN

Stack Overflow用户
提问于 2016-09-10 01:43:38
回答 2查看 71关注 0票数 0

我希望根据给定的属性参数Order对属性进行排序。

属性:

代码语言:javascript
复制
public class Items: Attribute
{
    public int Order { get; set; }
    public Items(int order)
    { 
      this.Order = order;
    }
}

Implementation:

代码语言:javascript
复制
public class client
{
   [Items(1)]
   public string fName {get; set;}

   [Items(3)]
   public string lName {get; set;}

   [Items(2)]
   public string mName {get; set;}
}

获取所有属性:

代码语言:javascript
复制
var properties = typeof(client).GetProperties().Where(
prop => prop.IsDefined(typeof(Items), false));

按Order#?排序

这是我试过的,但不起作用

代码语言:javascript
复制
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”,它将声明一定要对这些属性进行排序。这样我就不用把代码和订单弄得乱七八糟了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-10 02:01:05

您可以使用Linq和OrderBy

代码语言:javascript
复制
var sorted = properties
    .OrderBy(p => ((Items)p.GetCustomAttributes(true)
                           .FirstOrDefault(a => a is Items)).Order);

结果如下:fNamemNamelName

那么在OrderBy内部发生了什么:访问自定义属性。首先查找类型为ItemsOrder属性,并将其用作排序参数。

要按相反的顺序排序,只需使用OrderByDescending

票数 1
EN

Stack Overflow用户

发布于 2016-09-10 02:24:37

你可以试试这个

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39421705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档