【发布时间】:2016-09-02 23:21:52
【问题描述】:
我正在为我的 C# 项目在本机库上编写 C++/CLI 包装器。我正在尝试将本机 C++ 中的 std::vector
auto arr = gcnew array<System::Byte>(10);
auto arr = gcnew array<System::Byte^>(10);
但在第一种情况下,在 C# 代码中我们得到了 System::Byte[] 类型,而在第二种情况下,我们得到了 System::ValueType[]。
所以我的问题是为什么我们会出现这种奇怪的行为?
【问题讨论】:
-
不是我的强项,但我相信在第一个示例中,您声明了一个
byte数组,正如您所期望的那样。第二个示例是声明一个装箱字节数组(一种值类型),以便您可以拥有引用。 -
愚蠢的我。可能你是对的。我很困惑,因为当您在 C# 中使用 new 关键字创建 System.Byte 时,即没有发生新的 Byte() 装箱。我猜当你调用 gcnew System::Byte() (在 c++/cli 中)适合我上面描述的第二个数组时,会有相同的行为。