gpt4 book ai didi

c# - 按 customAttribute 的值排序对象的属性

转载 作者:太空狗 更新时间:2023-10-30 00:42:54 27 4
gpt4 key购买 nike

我想做的是编写 linq 表达式,它允许我订购我的 List<PropertyInfo>某些对象的自定义属性,例如:

public class SampleClass{

[CustomAttribute("MyAttrib1",1)]
public string Name{ get; set; }
[CustomAttribute("MyAttrib2",1)]
public string Desc{get;set;}
[CustomAttribute("MyAttrib1",2)]
public int Price{get;set;}
}

自定义属性.cs:

public class CustomAttribute: Attribute{
public string AttribName{get;set;}
public int Index{get;set;}
public CustomAttribute(string attribName,int index)
{
AttribName = attribName;
Index = index;
}
}

到目前为止,我能够从名为 SampleClass 的类中获取所有属性:

List<PropertyInfo> propertiesList = new List<PropertyInfo>((IEnumerable<PropertyInfo>)typeof(SampleClass).GetProperties());

到目前为止,我已尝试对 propertiesList 进行排序(顺便说一句,这是行不通的):

var sortedPropertys = propertiesList
.OrderByDescending(
(x, y) => ((CustomAttribute) Attribute.GetCustomAttribute((PropertyInfo) x, typeof (CustomAttribute))).AttribName
.CompareTo((((CustomAttribute) Attribute.GetCustomAttribute((PropertyInfo) y, typeof (CustomAttribute))).AttribName ))
).OrderByDescending(
(x,y)=>((CustomAttribute) Attribute.GetCustomAttribute((PropertyInfo) x, typeof (CustomAttribute))).Index
.CompareTo((((CustomAttribute) Attribute.GetCustomAttribute((PropertyInfo) y, typeof (CustomAttribute))).Index)))
.Select(x=>x);

输出列表应该是(我只会用 PropertyInfo.Name 告诉它):

property name: Name,Price,Desc

我的问题是:是否可以这样做?如果是,我该如何正确执行此操作?

如果您有任何问题,请提问(我会尽力回答所有不确定的问题)。我希望问题的描述足够了。

感谢提前:)

最佳答案

var props = typeof(SampleClass)
.GetProperties()
.OrderBy(p => p.GetCustomAttributes().OfType<CustomAttribute>().First().AttribName)
.ThenBy(p => p.GetCustomAttributes().OfType<CustomAttribute>().First().Index)
.Select(p => p.Name);

var propNames = String.Join(", ", props);

输出:名称、价格、描述

关于c# - 按 customAttribute 的值排序对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com