Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

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

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...