如何为 Span<byte> 创建结构

And*_*eas 3 c# struct

我正在尝试创建一个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)

Guv*_*nte 6

Span是一种特殊类型,设计为存在于堆栈中。您不能将其放在 a 内部,class因为这可能会使其引用的内容不会比堆引用的寿命更长。例如,您可以使用 aSpan来引用通过 创建的内容stackalloc

通常Span仅用作局部变量,以尽可能最抽象的方式引用一段数据。在某些情况下,存储它们是有意义的,但在很多情况下Memory更好,因为虽然它消除了引用事物的能力,但stackalloc如果您将事物存储在类中,您可能不希望这种能力。

如果您需要创建一个struct包含 a 的文件,Span请用 表示它,public ref struct SpanStruct但请注意,这意味着它也不能放入 a 中class