1
根据MSDN,是否可以使用属性对Type.GetProperties()返回的类型属性进行排序?
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; }
}
,并期望性的判定顺序是
- 质量
- 颜色
- 形状
我编辑了我的问题,包括VoodooOrdinalAttribute实现。你的查询如何按照属性构造函数参数和/或属性指定的顺序进行拾取? – Jeff 2013-03-20 21:47:34
对于每个属性,它都获得属性(首先让表达式)。然后它执行一个空的检查(where子句),然后从该属性的属性实例(第二个let表达式)获取序号。最后,它按升序排列属性(orderby子句),然后选择属性(select子句)。 – JKor 2013-03-20 22:30:41
啊......知道了。 '.Ordinal'是你在属性上赋予属性的名称。我会更新我的问题。干得不错! – Jeff 2013-03-20 22:58:19