我开始学习C#,并且通常使用C ++。
我正在尝试调整很多方法,但是std::array
似乎是不可能的...
我只想运行这种代码:
public struct Foo {};
public struct Test
{
public Foo value[20];
};
我不想每次使用此结构时都进行分配,也不想使用任何类。
我看到了fixed
关键字,但它仅适用于基本类型...
有没有像std::array
这样简单的东西?
我什至可以在C语言中做到这一点。
您将如何解决这个问题? (即使它仍然是动态分配的。)
答案 0 :(得分:0)
使用固定大小的缓冲区(fixed
)仅适用于基本类型,因为其用途旨在互操作。数组类型是引用类型,因此它们可以具有动态大小:
public struct Test
{
public Foo[] value;
}
但是请注意,复制结构只会复制引用,因此数组将相同。我建议您要么使类型不可变(通过禁用对数组的写操作),要么将struct
更改为class
并显式控制克隆。
在C#中,没有固定大小的按值数组类型的东西(尽管我曾经提出过)。最接近它的是值元组。
答案 1 :(得分:-2)
因此,似乎没有办法不像在编译时动态分配已知内容那样愚蠢。但这是C#,所以我只需要...尝试闭上眼睛。 无论如何,我做了一些事情来同时解决数组别名和固定数组(在这个问题上我没有问过数组别名)。
public abstract
class Array<T>
{
private T[] data;
protected Array(int size) { data = new T[size]; }
public T this[int i]
{
get { return data[i]; }
set { data[i] = value; }
}
};
public Alias : Array<int>
{
static public int Length = 10;
public Area() : base(Length) {}
};
有人说用C#编写代码更快。 如果有人更好,我会很乐意接受!