public : array<Byte>^ Foo(array<Byte>^ data)
获取动态大小的管理数组
但是我如何获得固定大小的管理字节数组呢?
我想强制C#用户向我发送8字节的数组;并获得8个字节的反馈。
样式:
public : Byte[8] Foo(Byte[8] data)
编辑:
有人可以解释为什么在安全上下文中不可能吗?
C#不允许你这样做。你需要验证数组的长度,如果长度不是8,可能会抛出异常。
另外,你的函数类型不能是Byte[8]
,你需要将其更改为Byte[]
。
unsafe struct fixedLengthByteArrayWrapper
{
public fixed byte byteArray[8];
}
inline_array
来表示此类型。fixed
缓冲区不是数组;即使语法相似,也不能像数组一样对待它们。每次操作 fixed
缓冲区时,都需要同时使用 unsafe
和 fixed
语句(如果我没记错的话,fixed
语句会隐式执行固定操作)。在某些情况下,fixed
缓冲区可能非常有用,但个人建议将其作为实现细节而非 API 的一部分。 - Marc Gravelllong
或ulong
。这很老式,但它有效。它还有一个优点,不需要一个对象(byte[]
是一个对象)-它是一个纯值类型(在这种情况下是原始类型)。
byte[]
类型作为参数的方法,该数组可以是null
、长度为0或长度为213341。添加一行检查非常容易……固定缓冲区具有已知/定义的长度,但它们不是数组。 - Marc Gravell