如何在C++CLI中强制转换托管阵列

本文关键字:转换 阵列 C++CLI | 更新日期: 2023-09-27 17:58:40

我正在将一些C#代码迁移到C++CLI,并且我需要强制转换ushort 的托管数组

这是C#代码

foreach(ushort v in mo.Properties["ChassisTypes"].Value as ushort[])

这是我迄今为止的尝试

for each(USHORT ^v in (USHORT[] ^) mo.Properties["ChassisTypes"].Value)

不幸的是,这给了我一些错误

1 IntelliSense:不允许使用不完整的类型

2 IntelliSense:应为")"

3 IntelliSense:表达式必须具有类类型

在C++CLI中强制转换这种数组的正确方法是什么?

如何在C++CLI中强制转换托管阵列

您可以尝试以下代码:

for each(UInt16 v in (array<UInt16>^)(mo->Properties["ChassisTypes"]->Value))
{
}

为了安全起见,您可以像@Ben所说的那样使用dynamic_cast

array<UInt16>^ chassisTypes = dynamic_cast<array<UInt16>^>(mo->Properties["ChassisTypes"]->Value);
if (chassisTypes != nullptr)
    for each(UInt16 v in chassisTypes)
    {
    }