带参数

时间:2017-11-15 18:03:58

标签: c# arrays

我正在尝试创建一个二维数组,但我似乎无法在构造函数中传递值。

例如

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,]

2 个答案:

答案 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') ...}, {...} ...}