这不起作用,因为您不能直接初始化结构中的字段:
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
字段?
这可能不是最好的方法,但您可以向构造函数传递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]);
}
}
但这取决于你想用它做什么...