c# - 可以初始化一个 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 结构的字段吗?
解决方案
这可能不是最好的方法,但您可以将 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]);
}
}
这真的取决于你想用它做什么......
推荐阅读
- javascript - 如何将变量与 nth-child 选择器一起使用?
- python - Pandas Dataframe:从字典中,根据键的值生成一个包含键多次的数据框
- vue.js - 另一个视图的 Vue3 延迟加载视图?
- c# - 调试自定义 XAML 转换器
- spring - 如何跟踪客户端在 Spring Boot 中调用我的 EndPoint 的次数
- php - PHP以数组中的特定项目为目标
- xpath - 无孪生节点的 XPath
- c# - 在 Selenium 无头模式下临时显示窗口
- vb.net - 有人可以帮我解决这个错误吗?InvalidOperationException 未处理
- python - 如何从python中的文本文件中读取完整的字典数据类型?