[英]How to initialize array of struct?
功能失调的例子:
public struct MyStruct { public int i, j; }
static readonly MyStruct [] myTable = new MyStruct [3]
{
{0, 0}, {1, 1}, {2, 2}
}
我知道这段代码不起作用。 现在我该如何写下来(正确的语法)?
这背后的想法如下。 Afaik struct arrays 的元素是值类型,因此 myTable 指向包含三个 MyStruct 对象的 memory 位置(而不是指向包含三个 MyStruct 对象的 memory 位置的指针)
那么我如何 go 关于初始化那些 MyStruct 对象,正确的语法是什么? 我不必再分配它们了,对吧?
您面临的问题与使用 struct 作为数组类型无关。 如果您使用 class,您的语法也会无效。
这有效:
MyStruct [] myTable = new MyStruct []
{
new MyStruct { i = 0, j = 0 },
new MyStruct { i = 1, j = 1 },
new MyStruct { i = 2, j = 2 }
};
您必须将集合初始化程序与 object 初始化程序一起使用。
由于集合初始化器和 object 初始化器只是语法糖,这相当于
MyStruct [] myTable = new MyStruct[3];
var tmp = new MyStruct();
tmp.i = 0;
tmp.j = 0;
myTable[0] = tmp;
// and so on...
你真正想要的结构数组是这样的:
MyStruct [] myTable = new MyStruct[3];
myTable[0].i = 0;
myTable[0].j = 0;
// and so on...
但这不能使用简写初始化语法来实现。
您需要使用MyStruct
的实际实例,您可以使用new
关键字创建它。
这应该工作...
struct MyStruct
{
int i, j;
public MyStruct(int a, int b)
{
i = a;
j = b;
}
}
static MyStruct[] myTable = new MyStruct[3]
{
new MyStruct(0, 0),
new MyStruct(1, 1),
new MyStruct(2, 2)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.