我们有一个需要解析的文件格式,如下所示:
v1|000|sammy|endpoint|blah
这是供应商提供给我们的有序固定宽度格式,因此这 5 个字段中的每一个都映射到类中的特定属性(实际格式有 >30)。
我只想通过对属性应用序列来使用反射来解析它。我可以做到这一点的一种方法是自己编写一些东西 - 编写一个采用单个数字的属性类,并将该属性应用于每个属性及其序列索引,并在 OrderBy 子句中的反射期间查找它。
在 C# 中是否有现有的或更好的方法来执行此操作?例如,是否已经有一个属性?有没有办法在 C# 或什至 MSIL 中询问在类中声明了哪些顺序属性?
最佳答案
使用 PropertyInfo.MetadataToken
可以看到属性在元数据中出现的顺序.碰巧当前的编译器将使这个顺序与属性在源代码中出现的顺序相匹配,因此通过按 MetadataToken
排序,您将获得与源代码中相同的顺序。
免责声明: future 的编译器可能会改变这一点。如果没有理由,它可能不会,但是如果编译器,例如,变成多线程的,它可能需要额外的不必要的努力来保留原始顺序。如果您依赖于此,如果/当 .NET Framework 以这种中断的方式更新时,请确保您收到硬错误而不是静默运行时损坏。
关于c# - 在 C# 类中对属性进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11399174/