首页 > 解决方案 > 可以初始化一个 Spanref 结构中的字段?

问题描述

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

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 表达式的结果不能在此上下文中使用,因为它可能暴露在包含方法之外。

所以,问题是:可以初始化Span<T>ref 结构的字段吗?

标签: c#memorystruct

解决方案


这可能不是最好的方法,但您可以将 a 传递给Span<byte>构造函数:

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]);
    }
}

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


推荐阅读