c# - 在 C# 类中对属性进行排序

标签 c# reflection properties sql-order-by

我们有一个需要解析的文件格式,如下所示:

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/

相关文章:

c# - 内部类的公共(public)构造函数是什么意思

c# - 如何使用反射获取 C# 静态类属性的名称?

c# - System.Reflection.MethodInfo.Invoke 和多线程

java - 在相关接口(interface)之间分配职责

c# - 在C#类项目中,AssemblyCulture是干什么用的?

c# - 静态类 VS 私有(private)构造函数

c# - 从上传的多个文件中获取文件名

c# - 在 SSH 隧道中创建转发端口

properties - 如何在 IBM MQ JMS 接口(interface)上使用 JMS 属性?

java - 具有多个位置的 Spring 属性占位符配置器中的属性解析顺序是什么?