gpt4 book ai didi

c# - 如何初始化结构数组?

转载 作者:太空狗 更新时间:2023-10-29 20:53:21 27 4
gpt4 key购买 nike

功能失调的例子:

public struct MyStruct { public int i, j; }

static readonly MyStruct [] myTable = new MyStruct [3]
{
{0, 0}, {1, 1}, {2, 2}
}

我知道这段代码不起作用。现在我该如何写下来(正确的语法)?

这背后的想法如下。 Afaik 结构数组的元素是值类型,因此 myTable 指向包含三个 MyStruct 对象的内存位置(而不是指向包含三个(未初始化的)指向 MyStruct 对象的指针的内存位置)。

那么我该如何初始化那些 MyStruct 对象,正确的语法是什么?我不必再分配它们了,对吧?

最佳答案

您面临的问题与使用结构作为数组类型无关。如果您使用类,您的语法也将无效。

这个有效:

MyStruct [] myTable = new MyStruct [] 
{
new MyStruct { i = 0, j = 0 },
new MyStruct { i = 1, j = 1 },
new MyStruct { i = 2, j = 2 }
};

您必须将集合初始化器与对象初始化器一起使用。

由于集合初始化器和对象初始化器只是语法糖,这等同于

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...

但这不能使用简写初始化语法来实现。

关于c# - 如何初始化结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7079206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com