Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
275 views
in Technique[技术] by (71.8m points)

c# - if GetFields() doesn't guarantee order, how does LayoutKind.Sequential work

I need to get fieldinfo in a guaranteed order with respect to declaration order. Right now I'm using attributes to specify order.

Is there a more automatic way of doing this?

Does anyone have knowledge of how LayoutKind.Sequential works, and if I can apply its technique.

I don't see how LayoutKind.Sequential works, unless there's some precompiler code that adds attributes.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If you want the ordering of the fields returned by Type.GetFields to be stable, try sorting by the MetadataToken property.

Type myType = ...
BindingFlags flags = ...
IEnumerable<FieldInfo> orderedFields = myType.GetFields(flags)
                                             .OrderBy(field => field.MetadataToken);

Empirically, ordering fields in this manner has been found to return them in declaration order, although this isn't documented.

By the way, the question as asked doesn't entirely make sense; there isn't any reason to believe that the reflection API is tied in any way to how the runtime lays objects out in memory.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...