是否可以在C#中使用类似C的数组?

问题描述 投票:0回答:1

我想创建一个类,它基本上只是一个固定大小的数组,其中包含一些函数。这将像这样完成:

private class SomeClass : SomeSuperClass {
    private readonly SomeType[] children = new SomeType[256];
    ...
}

现在这在逻辑上是可行的。但我认为这将使数组成为一个单独的堆对象,这是我不想要的。我更愿意让它表现得好像我会在 C++ 中执行以下操作一样。

class SomeClass : SomeSuperClass {
    SomeType children[256];
    ...
}

有没有办法在 C# 中做到这一点,或者我是否必须依赖我的编译器来优化它?这不是一个大问题,但它确实困扰着我,我自己找不到任何关于此的信息。

c# c++ arrays class syntax
1个回答
0
投票

正如 @EtiennedeMartel 评论的那样,您可以使用 内联数组 为此:

内联数组由运行时团队和其他库作者使用 提高应用程序的性能。内联数组使开发人员能够 以结构类型创建固定大小的数组。一个结构体 内联缓冲区应提供类似于 不安全的固定大小缓冲区。

您的案例的一个例子:

[System.Runtime.CompilerServices.InlineArray(256)]
public struct ChildrenArray
{
    private SomeType _element0;
}

private class SomeClass : SomeSuperClass {
    private readonly ChildrenArray children = new ChildrenArray();
    //...
}

请注意,它自 C# 12 起可用。

© www.soinside.com 2019 - 2024. All rights reserved.