我正在使用反射进行编码和解码。
当我读取this.GetType()。Getfields()时,在某些机器中,它是以随机顺序返回的,我需要将它们重新排序以正确进行编码和解码。

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

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


这是正确的方法吗?
我的意思是,现在可以给我正确的排序,但是我不知道每次调用它(计时或处理问题的时间)是否都可以。

这段代码将来可能会发生任何问题吗?

我的问题是关于在排序中使用“ FieldHandle”。

如果不稳定,我可以用它代替。

问候,

最佳答案

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

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


但是请记住,FieldHandle不一定是要进行排序的稳定或有意义的字段。

编辑:一般来说,您在询问使用FieldHandle进行排序的问题。在这种情况下,答案是肯定的,将来您将遇到问题。 FieldHandle是指向内存中结构的指针。此内存位置是随机分配的。每次运行程序时,您将获得不同的FieldHandles集,并且排序将有所不同。这不是字段的唯一且持久的ID,而只是一个内存指针。

您想通过这种排序完成什么?也许我们可以建议一些替代方法。

关于c# - 订购FieldInfos,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9256494/

10-13 02:02