[英]Is it possible sort a type's properties returned from Type.GetProperties() using attributes?
根据MSDN ,
Type.GetProperties() GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序。 您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同。
可以以某种方式对属性进行注释(可能是自定义属性),以便您可以执行此类操作吗?
var properties = typeof(myClass).GetProperties()
.AsEnumerable().OrderBy(Func<VoodooOrdinalAttribute>);
同
public class MyClass
{
[VoodooOrdinalAttribute(2)] public string Color { get; set;}
[VoodooOrdinalAttribute(3)] public string Shape { get; set;}
[VoodooOrdinalAttribute(1)] public string Mass { get; set;}
}
和这个
public class VoodooOrdinalAttribute : Attribute
{
public VoodooOrdinalAttribute(int ordinal)
{
this.Ordinal = ordinal;
}
public int Ordinal { get; set; }
}
并期望本能的顺序
是的,您可以使用属性来订购属性。 如果使用与示例中一样的用法定义属性,则这是一个LINQ查询,该查询按属性中指定的数字对属性进行排序。
var propertyData = from prop in typeof(MyClass).GetProperties()
let voodooOrdinalAttribute = Attribute.GetCustomAttribute(prop, typeof(VoodooOrdinalAttribute)) as VoodooOrdinalAttribute
where voodooOrdinalAttribute != null
let lineOrder = voodooOrdinalAttribute.Ordinal
orderby lineOrder ascending
select prop;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.