我正在使用反射进行编码和解码。当我读到这个的时候。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"
如果它不稳定,我可以用什么来代替它
问候,
一个更简单的方法是使用Linq:
FieldInfo[] infos = typeof(string).GetFields()
.OrderBy(fi => fi.FieldHandle.Value.ToInt32()).ToArray();
但请记住,FieldHandle不一定是一个稳定或有意义的字段
编辑:我看到你在问关于使用FieldHandle进行排序的问题。在这种情况下,答案是肯定的,你将来会遇到问题。FieldHandle是指向内存中某个结构的指针。此内存位置是随机分配的。每次运行程序时,都会得到一组不同的FieldHandles,排序也会有所不同。这不是字段的唯一且持久的ID,它只是一个内存指针。
你想通过这种排序实现什么?也许我们可以提出一些替代方案。