为什么MemoryMarshal.Cast适用于Span <t>而不适用​​于Memory <t>?

时间:2019-05-13 09:56:23

标签: c# system.memory

有人可以解释为什么为MemoryMarshal.Cast定义Span<T>而不为Memory<T>定义吗?它们本质上都是指向连续内存的指针。因此,我看不出为什么Span cast比Memory cast更安全。

我正在寻找的是任何使用通信协议的程序员的梦想:从任何数组到字节数组的非复制转换,类似

public static byte[] ToBytes<A>(this A[] a) where A : struct {
    Memory<A> m = a;
    Memory<byte> mb = MemoryMarshal.Cast<A, byte>(m);       // Compiler error !
    ArraySegment<byte> ba;
    bool b = MemoryMarshal.TryGetArray(mb, out ba);
    return ba.Array;
}

此外,做类似事情的其他方法似乎也受阻(例如,没有从Span到内存的转换,TryGetArray对Span不起作用...)我想所有这些都有很好的理由这些禁忌;但是,我找不到一个。

0 个答案:

没有答案
相关问题