枚举大小以字节为单位

以字节为单位的枚举大小是多少?

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)); 

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

文件说:

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

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

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

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

我也认为你过分思考尺寸问题。 看看你最近的另一个问题,你似乎正在将C ++结构转换为C#以进行pinvoke。 好吧,C#enum将直接映射到C ++枚举。 pinvoke marshaller将照顾尺寸并为您布置它们。 您不需要明确处理它。