我正在尝试创建一个Struct类型Span<byte>,但我收到此行的编译器错误:
public Span<byte> X { get; set; }
它说:
字段或自动实现的属性不能是类型Span<byte>,除非它是 ref 结构的实例成员。
我不确定这意味着什么或如何创建Span<byte>. 我知道速度非常快,所以这就是我尝试同时使用和structs的原因。谢谢你!SpanStructs
public struct SpanStruct
{
public Span<byte> X { get; set; }
public SpanStruct(Span<byte> x)
{
X = x;
}
}
void function1()
{
var list = new SpanStruct[1000];
for (int i = 0; i < 1000; i++)
{
Span<byte> span = new Span<byte>();
list[i] = new SpanStruct(span);
}
}
Run Code Online (Sandbox Code Playgroud)
Span是一种特殊类型,设计为存在于堆栈中。您不能将其放在 a 内部,class因为这可能会使其引用的内容不会比堆引用的寿命更长。例如,您可以使用 aSpan来引用通过 创建的内容stackalloc。
通常Span仅用作局部变量,以尽可能最抽象的方式引用一段数据。在某些情况下,存储它们是有意义的,但在很多情况下Memory更好,因为虽然它消除了引用事物的能力,但stackalloc如果您将事物存储在类中,您可能不希望这种能力。
如果您需要创建一个struct包含 a 的文件,Span请用 表示它,public ref struct SpanStruct但请注意,这意味着它也不能放入 a 中class。