我正在将一些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中强制转换此类数组的正确方法是什么?

最佳答案

您可以尝试以下代码:

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)
    {
    }

10-07 12:25