我有一个名为Tile的自定义类。我有一个瓷砖对象列表:
List<Tile> openList = new List<Tile>();
稍后在我的代码中,我尝试访问列表中的第一个对象。我知道它不是空的,因为我的Debug.Log
清楚地表明我在openList
中有Tiles。
foreach(Tile t in openList)
Debug.Log ("Gscore of Tiles in openlist: " + t.getGScore());
Tile current = openList [0];
然而,当我运行此操作时,我遇到Tile current = openList[0];
错误是:
ArgumentOutOfRangeException:参数超出范围。 参数名称:index System.Collections.Generic.List`1 [Tile] .get_Item(Int32 index)(at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:633) AStar.nextLayer()(在Assets / Scripts / AStar.cs:90)
对于我的生活,我无法弄清楚我做错了什么。我敢肯定,我忽略了一些愚蠢的事情。如果有人可以告诉我我做错了什么或如何通过索引访问列表我会非常感激。
感谢
答案 0 :(得分:2)
我不确定为什么列表突然似乎是空的,但更安全/更清洁的方式来获取集合中的第一个项目是这样的:
Tile current = openList.FirstOrDefault();
/* OR : as suggested by David Pfeffer, a faster, less wasteful check */
Tile current = openList.Count == 0 ? null : openList[0]
if(current != null)
{
//do something with current
}
答案 1 :(得分:0)
填充列表的代码是什么。错误是参数超出范围,因此列表未填充或为空。您应该查看索引超出范围的原因。
答案 2 :(得分:0)
当我这样做时,我遇到了同样的错误:
List<int> openList = new List<int>(0);
但是当我做了以下工作时,它确实有效。
List<int> openList = new List<int>();
openList.Add (0);
所以我猜测即使列表中的项目存在,它也没有被正确构造,所以它是List中没有任何指针的项目。这被解释为超出范围。 我假设了很多,但它确实有效。