我正在尝试创建一个可以通过以下方式访问和设置的多维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;
}
}
}
答案 0 :(得分:2)
我假设您要创建类似于多维数组的内容,您不必指定边界,并在设置元素时进行扩展。
在这种情况下,您的代码有问题的是您使用Insert()
。该方法可用于在现有列表的中间插入项目,但不能超出。因此,如果您有空列表,则无法在2
位置插入内容。
如果您想这样做,您必须通过循环调用Add()
手动扩展列表。
但是如果你期望非常稀疏的结构(也就是说,大多数元素没有设置),你应该使用像Dictionary<int, Dictionary<int, Dictionary<int, T>>>
这样的东西。