gpt4 book ai didi

c# - 如何使用自定义属性属性对类的属性进行排序

转载 作者:太空狗 更新时间:2023-10-29 18:03:36 26 4
gpt4 key购买 nike

我有一个应用于类属性的自定义属性。此属性用于将类的属性导出到平面文件。

属性的属性之一是 FieldOrder。我需要确保导出类属性的顺序是正确的。此外,并非类中的所有属性都具有自定义特性。

我找到这篇文章:How do I sort a generic list based on a custom attribute?此解决方案假定所有属性都具有自定义属性,但我的情况并非如此。我也希望有更优雅的解决方案。

非常感谢您的帮助!

public interface IFileExport{}

public class ExportAttribute: Attribute
{
public int FieldOrder { get; set; }
public int FieldLength { get; set; }
public ExportAttribute() { }
}

public class ExportClass: IFileExport
{
[ExportAttribute( FieldOrder = 2, FieldLength = 25 )]
public string LastName { get; set; }

[ExportAttribute( FieldOrder=1, FieldLength=25)]
public string FirstName { get; set; }

[ExportAttribute( FieldOrder = 3, FieldLength = 3 )]
public int Age { get; set; }

public ExportClass() { }
}

public class TestClass
{
public static List<PropertyInfo> GetPropertiesSortedByFieldOrder
(IFileExport fileExport)
{
//get all properties on the IFileExport object
PropertyInfo[] allProperties = fileExport
.GetType()
.GetProperties( BindingFlags.Instance | BindingFlags.Public );
// now I need to figure out which properties have the ExportAttribute
//and sort them by the ExportAttribute.FieldOrder
}
}

更新:我按 ExportAttribute.FieldOrder 升序对属性进行排序

最佳答案

public static List<PropertyInfo> GetPropertiesSortedByFieldOrder( IFileExport    fileExport )
{
PropertyInfo[] allProperties = GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Select(x => new
{
Property = x,
Attribute = (ExportAttribute)Attribute.GetCustomAttribute(x, typeof(ExportAttribute), true)
})
.OrderBy(x => x.Attribute != null ? x.Attribute.FieldOrder : -1)
.Select(x => x.Property)
.ToArray();
}

由于您没有解释您如何在没有订购属性的情况下想要属性,所以我已经这样做了,所以它们会在开头。但这段代码的要点是:

  1. 获取属性
  2. 将它们放入匿名类型,以便您可以轻松访问属性和属性。
  3. FieldOrder 排序,对没有属性的属性使用 -1。 (不确定你在这里想要什么)
  4. 将序列转换回 PropertyInfo
  5. 的序列
  6. 将其转换为 PropertyInfo[] 数组。

关于c# - 如何使用自定义属性属性对类的属性进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877115/

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