我正在使用反射进行编码和解码。 当我读取 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# - 订购字段信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9256494/