尝试执行此多维List插入时,我错过了什么?

时间:2011-09-11 16:52:40

标签: c# list set multidimensional-array

我正在尝试创建一个可以通过以下方式访问和设置的多维List:

myObjectVar[1,2,3] = new MyObject();

我以下面的方式重载了[,,],但是Inserts永远不会运行。检查索引是否存在的正确方法是什么,因为下面的代码似乎不起作用。

public myObject this[int x, int y, int z] {
    get { 
    return _myObject[x][y][z]; 
}

    set { 
        if(_myObject.Count < x){
            _myObject.Insert(x, new List<List<myObject>>());
        }

        if(_myObject[x].Count < y){
            _myObject[x].Insert(y, new List<myObject>());
        }

        if(_myObject[x][y].Count < z){
            _myObject[x][y][z].Insert(z, value);    
        }
        else{
            _myObject[x][y][z] = value;    
        }
    }
}

1 个答案:

答案 0 :(得分:2)

我假设您要创建类似于多维数组的内容,您不必指定边界,并在设置元素时进行扩展。

在这种情况下,您的代码有问题的是您使用Insert()。该方法可用于在现有列表的中间插入项目,但不能超出。因此,如果您有空列表,则无法在2位置插入内容。

如果您想这样做,您必须通过循环调用Add()手动扩展列表。

但是如果你期望非常稀疏的结构(也就是说,大多数元素没有设置),你应该使用像Dictionary<int, Dictionary<int, Dictionary<int, T>>>这样的东西。