【发布时间】:2012-04-02 13:22:43
【问题描述】:
Type.GetFields() 不按特定顺序返回字段,但我想按声明顺序对它们进行排序。我怎样才能做到这一点?我没有在 FieldInfo 或任何具有类似功能的东西中看到“索引”属性。
动机:我想实现一个类似于this answer 的位域解决方案,但正如第二条评论中提到的那样,不能保证顺序。
编辑: 澄清 - 我不想创建此代码来依赖此排序。我想创建此代码来解析已经具有一定顺序的现有二进制数据。
EDIT 2(post answer):我选择了一个完全回答问题的答案,并且在我的测试中工作正常,但作为旁注,位域解决方案是有问题的:
从位字段读取值时,您会得到一个无符号整数(一定大小),但是您无法根据您在运行时获得的实际字段类型(字节、布尔值、整数)正确转换它字段信息。您可以使用运行时显式条件(if type.Equals(typeof(bool)) 等)来做到这一点,但这有点难看。
我最终使用了 C++/CLI,这让这变得非常简单。
【问题讨论】:
-
什么是“声明顺序”,面对部分类这样的特性?如果您想要一个明确的、明确的、按字母顺序排列的,那么目标似乎更简单。
-
@Damien_The_Unbeliever - 请参阅上面的说明。
-
@Asaf - 查看二进制文件是一种危险的方式,因为编译器可能会以不同方式优化事物。
-
@DanielA.White - 不是“可执行二进制文件”,而是由外部工具保存的特定格式的二进制数据。
标签: c# reflection