如果有人给我发 ArraySegment<byte> foo
并且这个段指向一个更大的缓冲区,将这个段复制到一个全新的 byte[]
的惯用方法是什么? ?
我尝试访问 foo.Array
但这似乎指向较大缓冲区的开头,而不是段的开头。
例如较大的缓冲区可能是“blahfoobar”,而 ArraySegment 指向“foo”。我想要一个 byte[]
只用“foo”。
我确定它非常简单,但是来自 C++,我无法理解 C# 中使用的行话。
最佳答案
创建一个新数组将完全错过 API 的重点,即表示预先存在的段。在最近的 .NET 版本中,Span<T>
和 ReadOnlySpan<T>
将是更好的选择 - 它们允许您在连续内存上创建抽象,而无需消费者担心 Offset
等等,因为这可以从外部强加。 Span<T>
上有构造函数和 ReadOnlySpan<T>
这允许您处理方面,以便消费者永远不需要了解它们,并且知道在最近的运行时:JIT 将省略对跨度的边界检查。
关于c# - 如何从数组段中获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65207456/