C#学习教程:如果GetFields()不保证顺序,LayoutKind.Sequential如何工作现在我正在使用属性来指定顺序。有没有更自动的方法?有谁知道LayoutKind.Sequential是如何工作的,如果有我可以应用的技术。我看不到LayoutKind.Sequential是如何工作的,除非有一些预编译器代码添加了属性。如果您希望Type.GetFields返回的字段顺序稳定,请尝试按MetadataToken属性排序。输入myType=...BindingFlagsflags=...IEnumerableorderedFields=myType.GetFields(flags).OrderBy(field=>field.MetadataToken);根据经验,已经发现以这种方式排序字段以声明的顺序返回它们,尽管没有记录。顺便说一句,这个问题不太合理;没有理由相信reflectionAPI与运行时对象在内存中的放置方式有任何关系。这个问题很老但不是那么老......我现在正在处理同样的问题。而且我更喜欢按照声明的顺序获取字段。以下调用应适用于值类型或格式化引用类型。varfields=type.GetFields().OrderBy(f=>Marshal.OffsetOf(type,f.Name).ToInt32());享受!LayoutKind.Sequential指定类型的字段应按照它们在源代码中声明的顺序在内存中布局。如果没有这个属性,CLR可以通过重新排列字段来自由地优化内存使用。所以该属性只是添加元数据,告诉CLR不要在内存优化中做任何会打乱字段顺序的事情。以上就是C#学习教程:如果GetFields()不保证顺序,LayoutKind.Sequential是如何工作的,分享所有内容,如果对大家有用需要详细了解C#学习教程,希望大家以后会多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
