我正在尝试制作一个多维列表,可以通过以下方式访问和设置:
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>>>
。