Vla*_*kov 2 c# memory .net-core
这个问题是关于类型Span<T>和RealOnlySpan<T>.NET Core的。该文档介绍了如何在阵列,阵列段,堆栈分配或非托管内存上创建跨区。在某些情况下,我想在单个变量(字段,ref参数或ref局部变量)上创建长度为1的跨度,以将其传递给可以处理任意跨度的API。我怎样才能做到这一点?
我想可能会有一个构造函数Span<T>.Span(ref T),但显然没有。将变量复制到数组中并在该数组上创建跨度并不能解决问题,因为跨度的任何修改都不会反映在原始变量上。
MemoryMarshal.CreateSpan<T>(ref T reference, int length)
Run Code Online (Sandbox Code Playgroud)
1作为长度参数传递。请注意,这本质上是不安全的*,这就是其在System.Runtime.InteropServices名称空间中的原因。
*无论如何都不会检查其有效性,如果长度太长,您将覆盖其他内存,如果从某个方法返回其范围及其局部变量,则可能会遇到麻烦等。
struct如果您的类型是 a (示例:int值初始化为 123),则可以安全地替代已接受的答案:
ReadOnlySpan<int> mySpan = stackalloc int[1] { 123 };
Run Code Online (Sandbox Code Playgroud)
如果您想要一个非只读范围,您可以将变量声明为对范围第一个元素的引用,如下所示:
Span<int> mySpan = stackalloc int[1] { 123 };
ref var myVariable = ref mySpan[0];
Run Code Online (Sandbox Code Playgroud)
现在访问变量或范围的内容将访问/写入相同的值。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |