2009-12-09 117 views

回答

37

假設您的本機代碼

enum shape_type_e 
{ 
    stUNHANDLED  = 0,   //!< Unhandled shape data. 
    stPOINT   = 1    //!< Point data. 
    ... 
}; 

和託管代碼是

public enum class ShapeType 
{ 
    Unhandled = 0, 
    Point  = 1, 
    ... 
}; 

您可以從託管到本機採用

shape_type_e nativeST = stPOINT; 
ShapeType managedST = static_cast<ShapeType>(nativeST); 
Debug.Assert(managedST == ShapeType::Point); 

我總是用static_cast投,不是C#的鑄造方式。

+2

從上面的代碼,我想你是從本地投射到託管枚舉。從託管到本地的其他方面呢? – Lopper 2009-12-10 06:53:38

+5

靜態演員是你的朋友的兩種方式... nativeST = static_cast (managedST); – mcdave 2009-12-10 07:01:28

+0

謝謝mcdave! :) – Lopper 2009-12-10 07:01:51

1

這取決於。例如,如果您有一個具有ushort基礎類型的CLI枚舉,則它不能保持257的值。默認情況下,CLI枚舉基於int,在大多數情況下應該沒問題。如果您的本機C++代碼使用無符號32位整數/ 64位整數作爲底層類型(如果枚舉),請將CLI枚舉的基本切換爲UInt32 long或ulong。

+2

我不會遇到這個問題,因爲兩個枚舉都是int類型的。但是在這種情況下應該使用哪種類型的演員?它應該是const_cast,static_cast,dynamic_cast,reinterpret_cast,safe_cast或只是C#轉換(例如(int))? – Lopper 2009-12-10 01:40:27