我正在使用反射进行编码和解码。
当我读取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/