提问者:小点点

可以在ref结构中初始化span<t>字段?


这不起作用,因为您不能直接初始化结构中的字段:

public ref  struct WordCollection
    {     
        public Span<byte> words = stackalloc byte[100];
    }

错误为:“WordCollection”:结构中不能有实例属性或字段初始值设定项。

但是,我也不能使用构造函数初始化它:

public ref  struct WordCollection
    {     
        public Span<byte> words;

        public WordCollection(int size)
        {
            words = stackalloc byte[size];
        }
    }

这里的错误是:在将控制权返回给调用方之前,必须完全分配字段“WordCollection.Words”。

这也行不通:

public ref  struct WordCollection
    {     
        public Span<byte> words;
    }

public class Test
    {
       public static void WordProc()
        {
            WordCollection wordCollection = new WordCollection();
            wordCollection.words = stackalloc byte[100];
        } 
    }

错误是:不能在此上下文中使用“span”类型的stackalloc表达式的结果,因为它可能在包含方法的外部公开。

所以,问题是:是否可以初始化ref结构的span字段?


共1个答案

匿名用户

这可能不是最好的方法,但您可以向构造函数传递span:

public ref struct WordCollection
{
    public Span<byte> words;

    public WordCollection(Span<byte> words)
    {
        this.words = words;
    }
}

然后:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
        WordCollection words = new WordCollection(stackalloc byte[100]);
    }
}

但这取决于你想用它做什么...