枚举大小以字节为单位

时间:2014-01-06 06:52:40

标签: c# pinvoke

以下枚举的大小是多少?

public enum MMTPCnxNckRsn 
{
    MMTPCnxNckRsnNoAnswer = -2, 
    MMTPCnxNckRsnSendError = -1, 
    MMTPCnxNckRsnOk = 0, 
    MMTPCnxNckRsnInvalidMember = 1, 
    MMTPCnxNckRsnHubNotReady = 2, 
    MMTPCnxNckRsnUnknownMember = 3, 
    MMTPCnxNckRsnLastCnxTooRecent = 4, 
    MMTPCnxNckRsnInvalidVersion = 5, 
    MMTPCnxNckRsnInvalidOptions = 6, 
    MMTPCnxNckRsnTooManyCnx = 7 
};

我已经使用下面的代码找到它,但我认为它还不够......它是一个包含10个元素的字符串数组。我应该计算每个元素中的字符数,假设每个字符1个字节并添加所有字节元素?那么无符号数呢???

var size = Enum.GetNames(typeof(MMTPCnxNckRsn)).Length;
var arr = Enum.GetNames(typeof (MMTPCnxNckRsn));

我不确定是否重要的​​是提到我在marshaling c#的本地win32代码中间,并且找到用于管理内存中地址的枚举大小是很重要的。

1 个答案:

答案 0 :(得分:14)

documentation说:

  

枚举元素的默认基础类型是int。

因此,您的数据类型将具有4个字节的大小,这是int的大小。
您可以使用以下命令进行确认:

Marshal.SizeOf(Enum.GetUnderlyingType(typeof(MMTPCnxNckRsn)));

虽然您使用名称引用源代码中的枚举值,但它们在计算机上作为整数值运行的代码中表示。所以你对字符串数组的评论是非常广泛的。

我也认为你过分思考尺寸问题。看看你最近的另一个问题,你似乎正在将一个C ++结构转换为C#for pinvoke。好吧,C#enum将直接映射到C ++枚举。 pinvoke marshaller会照看尺码并为您准备。您无需明确处理。