结构内部的c#2D数组
我需要从一个方法返回一个结构。结构的一个成员必须是二维数组。我知道使用固定大小的缓冲区来声明结构中数组的大小,以及使用结构内部的c#2D数组,c#,arrays,struct,C#,Arrays,Struct,我需要从一个方法返回一个结构。结构的一个成员必须是二维数组。我知道使用固定大小的缓冲区来声明结构中数组的大小,以及使用 [StructLayout(LayoutKind.Explicit)] public struct struct1 { [FieldOffset(0)] .... } 但问题是。我不能这样做,因为我事先不知道阵列的长度。数组的大小取决于用户在运行时选择的参数 struct foo { int x; double[,] A = new d
[StructLayout(LayoutKind.Explicit)]
public struct struct1
{
[FieldOffset(0)]
....
}
但问题是。我不能这样做,因为我事先不知道阵列的长度。数组的大小取决于用户在运行时选择的参数
struct foo {
int x;
double[,] A = new double[N, M];
};
internal struct Foo
{
internal Double[,] bar;
internal Foo(Int32 sizeX, Int32 sizeY)
{
this.bar = new Double[sizeX, sizeY];
}
}
我不知道是N还是M提前了。它们由用户在运行时选择
struct foo {
int x;
double[,] A = new double[N, M];
};
internal struct Foo
{
internal Double[,] bar;
internal Foo(Int32 sizeX, Int32 sizeY)
{
this.bar = new Double[sizeX, sizeY];
}
}
这可能吗?如果是的话,你会怎么做?提前感谢您提供的任何建议或建议。不可能内联可变大小的数组,因为结构必须在编译时具有已知的固定大小。当然,您可以引用只有在运行时才知道大小的数组
struct foo {
int x;
double[,] A = new double[N, M];
};
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;
}
将为您提供一个Foo实例,其中字段栏引用维度为12 x 34的双数组。有什么原因不能使用类吗?这是较大代码的一部分。我不想要头顶的东西。此外,结构是通过引用而不是通过值传递的。(我想)。堆栈与堆问题。类也通过引用传递。如果在结构上使用类的开销会对系统产生重大影响,则系统存在重大设计问题。C#设计用于优化和很好地使用类。。。使用语言,这不是C++。不要预优化问题的一部分还在于结构的成员都是数据类型。没有办法。最后,我也不确定如何使用类来实现它。此外,结构在处理的每一组数据上都会完全更新。这非常好,谢谢。我复制了这一点,但在行中出现了一个错误:内部双[,]bar=null;;错误状态为“结构中不能有实例字段初始值设定项”。请参阅我对该问题的最后一条评论。我正在处理它。当我将其作为ref参数传递给某个方法时,仍然会在不一致的可访问性级别上出错,但我认为我可以解决这个问题。我已解决了可访问性问题,但遇到了错误:Foo不包含bar的定义,并且找不到接受Foo类型的第一个参数的扩展方法bar(是否缺少using指令或程序集引用?)这是因为
bar
被声明为private
-您必须使其可见,或者可能更好地提供一个包装字段的可见属性。不一致的可访问性是由于示例代码将结构Foo
声明为internal,并且您可能在带有public
visib的方法中使用它因此,您必须再次调整可见性。