public : array<Byte>^ Foo(array<Byte>^ data)
获取动态大小托管数组
但是如何获得固定大小的托管字节数组呢?
我想强迫C#用户向我发送8字节数组;并获得8个字节
式:
public : Byte[8] Foo(Byte[8] data)
修改
可以解释为什么它在安全环境中的不可思议性吗?
答案 0 :(得分:6)
如果你想强制正好是8个字节......请考虑发送long
或ulong
。老派,但它的确有效。它还具有不需要对象的优点(byte[]
是一个对象) - 它是一个纯值类型(在这种情况下是一个原语)
答案 1 :(得分:3)
C#不允许你这样做。您只需验证数组的长度,如果长度不是8,则可能抛出异常。
此外,您的功能类型不能是Byte[8]
;你必须将其更改为Byte[]
。
答案 2 :(得分:3)
您可以在结构中使用fixed size buffer。但是你需要它在一个不安全的区域。
unsafe struct fixedLengthByteArrayWrapper
{
public fixed byte byteArray[8];
}
在C ++方面,您需要使用inline_array
来表示此类型。
正如Marc所说,固定大小的缓冲区并不适合使用。您可能会发现进行运行时长度检查更方便。