C# 是否可以在没有循环的情况下封送结构的非托管数组?

C# 是否可以在没有循环的情况下封送结构的非托管数组?,c#,marshalling,C#,Marshalling,我从串行通信中获取二进制数据,需要将其封送到C#managed结构中。一切正常 其中一个响应是一个结构数组,我对其进行编组如下: byte[] buffer = /* binary data from serial port */ int sizeOfElement = Marshal.SizeOf(element); IntPtr ptr = Marshal.AllocHGlobal(sizeOfElement); int numElements = buffer.Length / sizeO

我从串行通信中获取二进制数据,需要将其封送到C#managed结构中。一切正常

其中一个响应是一个结构数组,我对其进行编组如下:

byte[] buffer = /* binary data from serial port */
int sizeOfElement = Marshal.SizeOf(element);
IntPtr ptr = Marshal.AllocHGlobal(sizeOfElement);
int numElements = buffer.Length / sizeOfElement;
TItem[] array = new TItem[numElements]; //TItem is a generic type

for (int i = 0; i < numElements; i++)
{
    int offset = (sizeOfElement * i);
    Marshal.Copy(this.Content, offset, ptr, sizeOfElement);
    array[i] = (TItem)Marshal.PtrToStructure(ptr, typeof(TItem));
    Marshal.DestroyStructure(ptr, typeof(TItem));
}

Marshal.FreeHGlobal(ptr);
byte[]buffer=/*来自串行端口的二进制数据*/
int-sizeOfElement=Marshal.SizeOf(元素);
IntPtr ptr=Marshal.AllocHGlobal(sizeOfElement);
int numElements=buffer.Length/sizeOfElement;
TItem[]数组=新的TItem[numElements]//TItem是泛型类型
对于(int i=0;i
不使用循环是否可以实现这一点?我在MSDN和SO中查找过,但没有找到任何可以用占用整个缓冲区的调用替换对
Marshal.PtrToStructure()
的调用


提前谢谢

@Downvoter期待您就如何具体改进问题提出反馈意见。通过使用GCHandle固定数组来避免笨拙的复制,请使用其AddrOfPinnedObject()获取IntPtr。如果您可以使用unsafe,则使用
fixed
关键字获取字节*,转换为IntPtr。如果您确实想摆脱循环,那么UnmanagedMemoryAccessor.ReadArray()将完成该任务。或者不用担心,串口速度很慢。