c# - 订购字段信息

标签 c# arrays sorting reflection

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

相关文章:

c# - 对象类型 System.Data.DataRowView 不存在映射?

c# - Visual Studio 2017 - 查找并替换为文本

c# - 如何使用 Android Xamarin 和 MvvmCross MvxTabsFragmentActivity 创建选项卡

C# 多维数组、ArrayList 或哈希表?

c++ - 将 CSV 文件中的值存储到动态字符数组

jquery - 如何同时查找数组中的两个值?

objective-c - 如何根据索引的 "score"随机选择数组索引?

Java排序算法

java - Arrays.sort() 会增加时间复杂度和空间时间复杂度吗?

php - mySQL 最后排序下划线