2014-01-06 102 views
8

以字節爲單位的enum大小是多少?枚舉大小(以字節爲單位)

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

我用下面的代碼來找到它,但我想是不是enough..It是一個字符串數組10 elements..Should餘數中的每個元素的字符,假設每字符1個字節並添加所有元素的字節?什麼是無符號數?

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

我不知道,如果它一提的是,我在marshaling本機Win32代碼到C#中間是很重要的,關鍵是要找到枚舉的大小在內存管理地址。

+0

請問爲什麼您覺得需要知道枚舉值的大小?你遇到特定問題嗎?究竟是如何存儲枚舉(即不是作爲字符串或數組)的錯誤思考?當然你也可以的 –

+0

@大衛赫弗南,非託管代碼中有一個結構(比如S1),S1有一些成員,包括工會(這個聯盟有一個枚舉類型成員),我用了'顯式佈局kind'用於編組s1(爲了更明確,避免進一步的內存管理問題!)..所以我想知道枚舉的大小以獲得聯合的大小,然後設置在s1中聯合之後的成員的偏移量(地址)。我用這篇文章http://www.codeproject.com/Articles/66243/Marshaling-with-C-Chapter-3-Marshaling-Compound-Ty ..真實世界的例子部分,第一個例子。 – Parid0kht

+1

請勿使用明確的。讓編譯器佈置它。它會做對。只有在使用顯式的時候,纔是聯合中的FieldOffset(0)。我對你的其他問題的回答顯示瞭如何。 –

回答

12

documentation說:

默認基礎類型枚舉元素爲int。

因此,您的數據類型將具有4個字節的大小,這是一個int的大小。雖然你使用的名字來枚舉值在源代碼中

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

,他們是在機器上運行,作爲整數值的代碼表示:
您可以通過使用以下命令確認這一點。所以你對字符串數組的評論是相當寬泛的。

我也認爲你是在思維大小的問題。看看你最近的其他問題,你似乎正在將C++結構轉換爲C#來進行pinvoke。那麼,C#枚舉將直接映射到C++枚舉。品管人員會照顧他們的尺寸,併爲你準備。你不需要明確處理。

相關問題