枚举大小以字节为单位

Par*_*kht 11 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 
};
Run Code Online (Sandbox Code Playgroud)

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

var size = Enum.GetNames(typeof(MMTPCnxNckRsn)).Length;
var arr = Enum.GetNames(typeof (MMTPCnxNckRsn));
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 17

文件说:

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

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

Marshal.SizeOf(Enum.GetUnderlyingType(typeof(MMTPCnxNckRsn)));
Run Code Online (Sandbox Code Playgroud)

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

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