当前位置: 首页 > 知识库问答 >
问题:

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

贲凌
2023-03-14

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

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个答案

姜磊
2023-03-14

这可能不是最好的方法,但您可以向构造函数传递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]);
    }
}

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

 类似资料:
  • 问题内容: Go Newbie问题:我正在尝试使用默认值初始化以下结构。我知道,如果“ Uri”是字符串而不是指向字符串(* string)的指针,则可以使用。但是我需要这个指针来比较结构的两个实例,如果未设置Uri,则Uri将为nil,例如,当我从json文件解组内容时。但是,如何正确地将这样的结构初始化为“静态默认值”呢? 上面的代码因 问题答案: 无法获得(指向)常数值的地址,这就是初始化失

  • 问题内容: 我怎样才能做到这一点: … 给出的编译结果为:“结构文字中的未知B字段’MemberA’” 当提供像这样的文字结构成员值时,如何初始化MemberA(从“父”结构)? 问题答案: 初始化时,匿名结构仅在其类型名称下(在您的情况下)是已知的。与该结构关联的成员和函数仅在实例存在之后才导出到外部。 您必须提供一个有效的实例来初始化: 编译错误 结构文字中的未知B字段’MemberA’ 确切

  • 问题内容: 我不知道如何初始化嵌套结构。在此处找到示例:http: //play.golang.org/p/NL6VXdHrjh 问题答案: 好吧,有什么特定的原因不使Proxy成为自己的结构? 无论如何,您有2个选择: 正确的方法是,只需将proxy移至其自己的结构,例如: 不太正确和丑陋的方法,但仍然有效:

  • 问题内容: 我对初始化包含映射的结构的最佳方法感到困惑。运行此代码将产生: 另一个想法是使用一种可以在地图为空的情况下对其进行初始化的方法: 还有其他选择吗?只是想看看是否有一种普遍接受的方法。 问题答案: 我可能会使用构造函数来做到这一点: 我已经在标准包中找到了这个示例(虽然没有地图,但是有切片):

  • 主要内容:初始化内嵌匿名结构体结构体内嵌初始化时,将结构体内嵌的类型作为字段名像普通结构体一样进行初始化,详细实现过程请参考下面的代码。 车辆结构的组装和初始化: 代码说明如下: 第 6 行定义车轮结构。 第 11 行定义引擎结构。 第 17 行定义车结构,由车轮和引擎结构体嵌入。 第 27 行,将 Car 的 Wheel 字段使用 Wheel 结构体进行初始化。 第 32 行,将 Car 的 Engine 字段使用 Engi

  • 此代码编译: 该代码不: 报告的错误(在 MSVC、gcc 和 clang 中)表明他们认为 构造函数未定义或不是 ,例如。从叮叮当当: 为什么? (可能与这个问题有关,但在使用时应该是完整的;只有仍然不完整。