我正在尝试创建一个二维数组,但我似乎无法在构造函数中传递值。
例如
public class MyObj
{
public string State {get; private set;}
public MyObj(string s)
{
this.State = s;
}
}
在另一个班级
private MyObj[,] Obj;
private void Setup()
{
this.Obj = new MyObj[5,5];
}
当我查看this.Obj
时,State的值始终为null。我理解为什么但没有循环遍历数组中的每个项目(在创建之后)并设置State属性(删除private set
)我不确定我是否还有其他选项?
虽然我知道语法错误,但
之类的东西this.Obj = new MyObj("default text for each item in array")[5,5,]
答案 0 :(得分:3)
使用new
创建参考对象数组时,每个元素都设置为默认值null
。没有语法可以传递默认元素,因此您需要使用嵌套循环手动填充数组:
private void Setup() {
this.Obj = new MyObj[5,5];
int rows = codes.GetLength(0);
int cols = codes.GetLength(1);
for (var r = 0; r != rows ; r++) {
for (var c = 0 ; c != cols ; c++) {
Obj[r,c] = new MyObj("default text for each item in array");
}
}
}
答案 1 :(得分:1)
创建数组时,只为潜在对象分配空间。您实际上并没有将任何对象分配给这些空间。将数组定义为new MyObj[5,5]
会生成一个由所有空值组成的5x5数组。您仍然需要初始化数组的每个成员。在初始化期间,您可以分配默认值。
或者,您可以使用内联初始化语法。
var a = new MyObj[,]{ {new MyObj('default'), new MyObj('default2') ...}, {...} ...}