Ordering FieldInfos

本文关键字:FieldInfos Ordering | 更新日期: 2023-09-27 18:24:35

我正在使用反射进行编码和解码。当我读到这个的时候。GetType().Getfields(),在一些机器中,它是以随机顺序返回的,我需要对它们进行排序才能正确地进行编码和解码。

我可以对由此返回的数组进行排序吗。使用FieldInfo.FieldHandle的GetType().GetFields()像这样:

        FieldInfo[] infos = GetType().GetFields();
        Array.Sort(infos, delegate(FieldInfo first, FieldInfo second)
        {
            return first.FieldHandle.Value.ToInt32().CompareTo(second..Value.ToInt32());
        });

这是正确的方式吗。我的意思是,现在它给了我正确的排序,但我不知道每次我打电话(处理问题的时间或时间)它是否会起作用。

这段代码将来可能会出现什么问题吗。

我的问题是关于在排序中使用"FieldHandle"

如果它不稳定,我可以用什么来代替它

问候,

Ordering FieldInfos

一个更简单的方法是使用Linq:

FieldInfo[] infos = typeof(string).GetFields()
   .OrderBy(fi => fi.FieldHandle.Value.ToInt32()).ToArray();

但请记住,FieldHandle不一定是一个稳定或有意义的字段

编辑:我看到你在问关于使用FieldHandle进行排序的问题。在这种情况下,答案是肯定的,你将来会遇到问题。FieldHandle是指向内存中某个结构的指针。此内存位置是随机分配的。每次运行程序时,都会得到一组不同的FieldHandles,排序也会有所不同。这不是字段的唯一且持久的ID,它只是一个内存指针。

你想通过这种排序实现什么?也许我们可以提出一些替代方案。