我知道在结构中内联一个变量大小的数组是不可能的,因为结构必须具有在编译时已知的固定大小。但是,可以引用一个只在结构中运行时已知的大小数组。
所以我有一个结构如下:
public struct Foo
{
public double[,] C;
internal Foo(Int32 sizeX, Int32 sizeY)
{
this.C = new double[sizeX, sizeY];
}
public static Foo Initialize(Int32 sizeX, Int32 sizeY)
{
var foo = new Foo(sizeX, sizeY);
for (var x = 0; x < sizeX; x++)
{
for (var y = 0; y < sizeY; y++)
{
foo.C[x, y] = 0.0;
}
}
return foo;
}
}
我按如下方式初始化此结构:
foo = Foo.Initialize(12, 35);
这很有效,没有问题。但是,如果我尝试在结构中添加其他数组,如下所示:
public struct Foo
{
public double[] eVal;
public double[,] C;
public double[,] eVec;
internal Foo(Int32 sizeX, Int32 sizeY)
{
this.eVal = new double[sizeX];
this.C = new double[sizeX, sizeY];
this.eVec = new double[sizeX, sizeY];
}
public static Foo Initialize(Int32 sizeX, Int32 sizeY)
{
var foo = new Foo(sizeX, sizeY);
for (var x = 0; x < sizeX; x++)
{
foo.eVal[x] = 0.0;
for (var y = 0; y < sizeY; y++)
{
foo.eVec[x, y] = 0.0;
foo.C[x, y] = 0.0;
}
}
return foo;
}
}
我将这个新结构初始化如下:
foo = Foo.Initialize(12, 35);
这不能正常工作。它编译并运行,但是当我打印出C的值时,似乎存在某种奇怪的内存地址问题。换句话说,如果我运行第一个只包含数组C的结构,则可以正确计算C的元素。当我使用附加数组运行新结构时,只能正确计算C的某些元素。其他人完全错了。我已经在这方面工作了一段时间,似乎无法解决这个问题。似乎新的结构似乎不能正常工作。任何人都可以提供有关此处发生的事情的建议以及如何解决这个问题?任何建议将不胜感激。非常感谢你。