【发布时间】:2011-01-27 10:19:15
【问题描述】:
我已经准备好用头撞墙了
我有一个名为 Map 的类,它有一个名为 tiles 的字典。
class Map
{
public Dictionary<Location, Tile> tiles = new Dictionary<Location, Tile>();
public Size mapSize;
public Map(Size size)
{
this.mapSize = size;
}
//etc...
我暂时填了这本字典来测试一些东西..
public void FillTemp(Dictionary<int, Item> itemInfo)
{
Random r = new Random();
for(int i =0; i < mapSize.Width; i++)
{
for(int j=0; j<mapSize.Height; j++)
{
Location temp = new Location(i, j, 0);
int rint = r.Next(0, (itemInfo.Count - 1));
Tile t = new Tile(new Item(rint, rint));
tiles[temp] = t;
}
}
}
在我的主程序代码中
Map m = new Map(10, 10);
m.FillTemp(iInfo);
Tile t = m.GetTile(new Location(2, 2, 0)); //The problem line
现在,如果我在我的代码中添加一个断点,我可以清楚地看到我的地图类的实例 (m) 通过上面的函数填充了对,但是当我尝试使用 GetTile 函数访问一个值时:
public Tile GetTile(Location location)
{
if(this.tiles.ContainsKey(location))
{
return this.tiles[location];
}
else
{
return null;
}
}
它总是返回 null。同样,如果我在 Map 对象内部查看并找到 x=2,y=2,z=0 的 Location 键,我清楚地看到该值是 FillTemp 生成的 Tile..
为什么要这样做?到目前为止,我对这样的字典没有任何问题。我不知道为什么它返回null。再一次,在调试时,我可以清楚地看到 Map 实例包含它说它没有的 Location 键...... 非常令人沮丧。
有什么线索吗?需要更多信息吗?
非常感谢您的帮助:)
【问题讨论】:
-
如果你写了一个简单的例子来说明问题会很有帮助。我试图为此设置一个测试,并且必须定义一些类。最后一个障碍是 Map 只定义了一个 Map(Size size) 构造函数,但代码调用了 new Map(10, 10)。只能看到一部分代码很难调试。
标签: c# dictionary equals keynotfoundexception