【发布时间】:2009-12-09 11:38:49
【问题描述】:
从本机代码enum 转换为包含相同enum 值的托管代码enum 的正确方法是什么?在 C++/CLI 中使用诸如 (int) 之类的 C# 转换方式有什么不同吗?
【问题讨论】:
标签: enums casting c++-cli native managed
从本机代码enum 转换为包含相同enum 值的托管代码enum 的正确方法是什么?在 C++/CLI 中使用诸如 (int) 之类的 C# 转换方式有什么不同吗?
【问题讨论】:
标签: enums casting c++-cli native managed
假设您的本机代码是
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# 的转换方式。
【讨论】:
这取决于。例如,如果您有一个底层类型为 ushort 的 CLI 枚举,它不能保存 257 的值。默认情况下,CLI 枚举基于 int,这在大多数情况下应该没问题。如果您的本机 C++ 代码使用无符号 32 位整数/64 位整数作为枚举的基础类型,请将 CLI 枚举的基数切换为 UInt32、long 或 ulong。
【讨论】: