当我试图执行这个多维列表插入时,我错过了什么

本文关键字:插入 列表 错过了 什么 执行 | 更新日期: 2023-09-27 18:08:09

我正在尝试制作一个多维列表,可以通过以下方式访问和设置:

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

我以以下方式重载了[,,],但是insert从未运行。检查索引是否存在的正确方法是什么,因为下面的代码似乎不工作

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;    
        }
    }
}

当我试图执行这个多维列表插入时,我错过了什么

我假设你想创建一个像多维数组的东西,你不需要指定边界,并在你设置元素时展开。

在这种情况下,代码的问题在于您使用了Insert()。该方法可用于在现有列表的中间插入项,但不能在中间插入项。所以,如果你的列表是空的,你就不能在2位置插入东西。

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

但是,如果您期望非常稀疏的结构(即,大多数元素没有设置),您可能应该使用Dictionary<int, Dictionary<int, Dictionary<int, T>>>