我需要从方法返回一个结构。结构的一个成员需要是一个2D数组。我知道使用固定大小的缓冲区来声明结构中数组的大小和使用
[StructLayout(LayoutKind.Explicit)]
public struct struct1
{
[FieldOffset(0)]
....
}
但这是问题所在。我不能这样做,因为我不知道阵列的长度。数组的大小取决于用户在运行时选择的参数。
struct foo {
int x;
double[,] A = new double[N, M];
};
我提前不知道N或M.它们由用户在运行时选择。
这可能吗?如果是,那怎么办呢?提前感谢您提供的任何建议或建议。
答案 0 :(得分:0)
无法内联可变大小的数组,因为结构必须具有在编译时已知的固定大小。您当然可以引用一个仅在运行时已知的大小数组。
internal struct Foo
{
internal Double[,] bar;
internal Foo(Int32 sizeX, Int32 sizeY)
{
this.bar = new Double[sizeX, sizeY];
}
}
你可以像这样使用这个结构
private function Foo InitializeFoo(Int32 sizeX, Int32 sizeY)
{
var foo = new Foo(sizeX, sizeY);
for (var y = 0; y < sizeY; y++)
{
for (var x = 0; x < sizeX; x++)
{
foo.bar[x, y] = x * y;
}
}
return foo;
}
并将此方法称为
var foo = InitializeFoo(12, 34);
将为您提供一个Foo实例,其字段栏引用尺寸为12 x 34的Double数组。