我想创建一个类,它基本上只是一个固定大小的数组,其中包含一些函数。这将像这样完成:
private class SomeClass : SomeSuperClass {
private readonly SomeType[] children = new SomeType[256];
...
}
现在这在逻辑上是可行的。但我认为这将使数组成为一个单独的堆对象,这是我不想要的。我更愿意让它表现得好像我会在 C++ 中执行以下操作一样。
class SomeClass : SomeSuperClass {
SomeType children[256];
...
}
有没有办法在 C# 中做到这一点,或者我是否必须依赖我的编译器来优化它?这不是一个大问题,但它确实困扰着我,我自己找不到任何关于此的信息。
正如 @EtiennedeMartel 评论的那样,您可以使用 内联数组 为此:
内联数组由运行时团队和其他库作者使用 提高应用程序的性能。内联数组使开发人员能够 以结构类型创建固定大小的数组。一个结构体 内联缓冲区应提供类似于 不安全的固定大小缓冲区。
您的案例的一个例子:
[System.Runtime.CompilerServices.InlineArray(256)]
public struct ChildrenArray
{
private SomeType _element0;
}
private class SomeClass : SomeSuperClass {
private readonly ChildrenArray children = new ChildrenArray();
//...
}
请注意,它自 C# 12 起可用。