Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建只读引用结构的集合_C#_.net - Fatal编程技术网

C# 创建只读引用结构的集合

C# 创建只读引用结构的集合,c#,.net,C#,.net,无法在C中创建只读引用结构的数组,如下所示: public readonly ref struct SomeStruct {} SomeStruct[] array = new SomeStruct[4]; 这会引发编译错误。 如何存储一个只读引用结构的集合?我想这就是您想要的: struct SomeStruct { int Data; } static void Main(string[] _) { Span<

无法在C中创建
只读引用结构的数组,如下所示:

public readonly ref struct SomeStruct {}
SomeStruct[] array = new SomeStruct[4];
这会引发编译错误。
如何存储一个
只读引用结构的集合?

我想这就是您想要的:

    struct SomeStruct
    {
        int Data;
    }

    static void Main(string[] _)
    {
        Span<SomeStruct> buffer = stackalloc SomeStruct[5];

        ref var someData = ref buffer[1];
    }
struct SomeStruct
{
int数据;
}
静态void Main(字符串[]41;
{
Span buffer=stackalloc SomeStruct[5];
ref var someData=ref缓冲区[1];
}
我要提醒你,你需要进行个人简介,并确保你确实需要这样做


正如其他人所说,您没有将“ref struct”放入集合中,而是将常规结构放入集合中,并向它们获取“ref”,这样您就不必复制数据。然后你控制分配它们的位置。如果不会引起问题,可以在堆栈上,也可以使用内存池。

如果不能,ref struct不能存储在集合中。我发现这可能对你有帮助


重新思考您的解决方案
ref struct
s是仅堆栈的东西,它们的数组意味着它们将进入堆(除非您
stackalloc
,这可能是允许的)。我觉得Span将是答案,但不知道确切的方法!我将权衡您的有益建议与Tanveer Badar建议的重新设计。我有一个层次结构图,其中一个结构将包含其他结构的“子”集合,因此一个选项是通过使用int类型的ID来表示父级而不是集合来实现层次结构,然后所有内容都可以是“ref readonly struct”。@user1718625我会警告不要过早优化。我会先看看整体设计,确保这是瓶颈所在。