C# 订购现场信息
我正在使用反射进行编码和解码。 当我阅读this.GetType().Getfields()时,在某些机器中它是以随机顺序返回的,我需要将它们重新排序,以便正确地进行编码和解码 我可以使用FieldInfo.FieldHandle对从.GetType().GetFields()返回的数组进行排序吗 像这样:C# 订购现场信息,c#,arrays,sorting,reflection,C#,Arrays,Sorting,Reflection,我正在使用反射进行编码和解码。 当我阅读this.GetType().Getfields()时,在某些机器中它是以随机顺序返回的,我需要将它们重新排序,以便正确地进行编码和解码 我可以使用FieldInfo.FieldHandle对从.GetType().GetFields()返回的数组进行排序吗 像这样: FieldInfo[] infos = GetType().GetFields(); Array.Sort(infos, delegate(FieldInfo
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是指向内存中结构的指针。此内存位置是随机分配的。每次运行程序时,都会得到一组不同的字段句柄,排序也会有所不同。这不是字段的唯一持久ID,它只是一个内存指针
您试图通过这种排序实现什么?也许我们可以提出一些替代方案。SortFields方法的定义是什么?什么对您来说是“正确的”?菲欧:我用它的定义来代替sortFilds。克里斯汀·霍斯达尔:现在是给我正确的顺序,但我不知道每次我叫它时,它是否都能做到(处理问题的时间或时间。我不认为按
FieldHandle
排序会在执行之间为您提供一致的结果,因为它是内部元数据。您为什么要对字段进行排序?我正在使用反射进行编码和解码。编码和解码什么?您在谈论加密/解密吗?您为什么要这样做我的意思是封装(获取特定的类字段,向这些值添加标题,将数据包发送到特定的机器,机器将删除标题,理解这些值,然后以相同的方式回复)。因此,如果我发送的第二个字段值替换为第一个字段值,则计算机将损坏。对不起,我仍然不清楚您试图实现的目标。您在此处提到的所有内容似乎与反射或字段句柄无关。您如何将此数据发送到其他计算机?似乎您正在尝试在计算机之间发送消息时定义数据协定。最好的方法是使用[DataContract]属性定义类,并添加[DataMember(Order=X)]成员本身的属性。这将确保消息格式是固定的。但我们在这里缺少几个步骤。我以前尝试使用属性,但我有200多个类。因此我将其作为计划B保留。