以下枚举的大小是多少?
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代码中间,并且找到用于管理内存中地址的枚举大小是很重要的。
答案 0 :(得分:14)
枚举元素的默认基础类型是int。
因此,您的数据类型将具有4个字节的大小,这是int的大小。
您可以使用以下命令进行确认:
Marshal.SizeOf(Enum.GetUnderlyingType(typeof(MMTPCnxNckRsn)));
虽然您使用名称引用源代码中的枚举值,但它们在计算机上作为整数值运行的代码中表示。所以你对字符串数组的评论是非常广泛的。
我也认为你过分思考尺寸问题。看看你最近的另一个问题,你似乎正在将一个C ++结构转换为C#for pinvoke。好吧,C#enum将直接映射到C ++枚举。 pinvoke marshaller会照看尺码并为您准备。您无需明确处理。