Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 订购现场信息_C#_Arrays_Sorting_Reflection - Fatal编程技术网

C# 订购现场信息

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

我正在使用反射进行编码和解码。 当我阅读this.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是指向内存中结构的指针。此内存位置是随机分配的。每次运行程序时,都会得到一组不同的字段句柄,排序也会有所不同。这不是字段的唯一持久ID,它只是一个内存指针


您试图通过这种排序实现什么?也许我们可以提出一些替代方案。

SortFields方法的定义是什么?什么对您来说是“正确的”?菲欧:我用它的定义来代替sortFilds。克里斯汀·霍斯达尔:现在是给我正确的顺序,但我不知道每次我叫它时,它是否都能做到(处理问题的时间或时间。我不认为按
FieldHandle
排序会在执行之间为您提供一致的结果,因为它是内部元数据。您为什么要对字段进行排序?我正在使用反射进行编码和解码。编码和解码什么?您在谈论加密/解密吗?您为什么要这样做我的意思是封装(获取特定的类字段,向这些值添加标题,将数据包发送到特定的机器,机器将删除标题,理解这些值,然后以相同的方式回复)。因此,如果我发送的第二个字段值替换为第一个字段值,则计算机将损坏。对不起,我仍然不清楚您试图实现的目标。您在此处提到的所有内容似乎与反射或字段句柄无关。您如何将此数据发送到其他计算机?似乎您正在尝试在计算机之间发送消息时定义数据协定。最好的方法是使用[DataContract]属性定义类,并添加[DataMember(Order=X)]成员本身的属性。这将确保消息格式是固定的。但我们在这里缺少几个步骤。我以前尝试使用属性,但我有200多个类。因此我将其作为计划B保留。