3 回答
TA贡献1820条经验 获得超10个赞
根据MSDN, MetadataToken一个模块内部是唯一的-没什么可说的是它可以保证任何订单。
即使它确实按照您希望的方式运行,也将是特定于实现的,并且随时可能更改,恕不另行通知。
请参阅此旧的MSDN博客条目。
我强烈建议您不要依赖任何此类实现细节-请参阅Marc Gravell的回答。
如果您在编译时需要一些东西,可以看一下Roslyn(尽管它还处于早期阶段)。
TA贡献1864条经验 获得超6个赞
如果要使用属性路由,这是我过去使用的方法;
public static IOrderedEnumerable<PropertyInfo> GetSortedProperties<T>()
{
return typeof(T)
.GetProperties()
.OrderBy(p => ((Order)p.GetCustomAttributes(typeof(Order), false)[0]).Order);
}
然后像这样使用它;
var test = new TestRecord { A = 1, B = 2, C = 3 };
foreach (var prop in GetSortedProperties<TestRecord>())
{
Console.WriteLine(prop.GetValue(test, null));
}
哪里;
class TestRecord
{
[Order(1)]
public int A { get; set; }
[Order(2)]
public int B { get; set; }
[Order(3)]
public int C { get; set; }
}
如果您在所有属性上都没有可比较属性的类型上运行该方法,则该方法将受到禁止,因此请小心使用它的方式,它应足以满足要求。
我省略了Order:Attribute的定义,因为Yahia到Marc Gravell的帖子的链接中有一个很好的示例。
- 3 回答
- 0 关注
- 1038 浏览
添加回答
举报