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

后端 未结 3 1552
孤独总比滥情好
孤独总比滥情好 2020-12-14 17:32

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 d

3条回答
  •  情深已故
    2020-12-14 18:05

    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 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.

提交回复
热议问题