1

根据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; }
}

并期望属性的顺序是

  1. 大量的
  2. 颜色
  3. 形状
4

1 回答 1

3

是的,您可以使用属性对属性进行排序。如果您像在示例中所做的那样使用 use 定义属性,则这是一个 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;
于 2013-03-20T21:26:01.220 回答