c#在Struct中的2D数组

时间:2013-11-19 21:11:42

标签: c# arrays struct

我需要从方法返回一个结构。结构的一个成员需要是一个2D数组。我知道使用固定大小的缓冲区来声明结构中数组的大小和使用

[StructLayout(LayoutKind.Explicit)]
public struct struct1
{
    [FieldOffset(0)]
       ....
}

但这是问题所在。我不能这样做,因为我不知道阵列的长度。数组的大小取决于用户在运行时选择的参数。

struct foo {
    int x;
    double[,]  A = new double[N, M];
};

我提前不知道N或M.它们由用户在运行时选择。

这可能吗?如果是,那怎么办呢?提前感谢您提供的任何建议或建议。

1 个答案:

答案 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数组。