VB.net列表(共T个)未返回索引对象

VB.net列表(共T个)未返回索引对象,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我正在做一个小游戏,它是基于网格正方形的地图。我有一个类(clsGrid),它为每个网格正方形存储一些属性。网格正方形对象被组织成一个列表(clsGrid)。 循环和流读取器正在成功地从文本文件读取属性,将属性放入网格对象,并将网格对象添加到“我的网格列表”中。从网格列表中检索网格时,我得到了不寻常的结果。不管我给列表提供了什么索引,我似乎总是得到列表中最后一个索引网格。调试器似乎建议将正确的数字读入流读取器,并将其添加到gridHolder。但是,不管我给最后一个grid.id的索引是什么,最

我正在做一个小游戏,它是基于网格正方形的地图。我有一个类(clsGrid),它为每个网格正方形存储一些属性。网格正方形对象被组织成一个列表(clsGrid)。
循环和流读取器正在成功地从文本文件读取属性,将属性放入网格对象,并将网格对象添加到“我的网格列表”中。从网格列表中检索网格时,我得到了不寻常的结果。不管我给列表提供了什么索引,我似乎总是得到列表中最后一个索引网格。调试器似乎建议将正确的数字读入流读取器,并将其添加到gridHolder。但是,不管我给最后一个grid.id的索引是什么,最后的消息框都会显示最后一个grid.id

我做这件事已经很久了,这可能是件愚蠢的事。提前谢谢你的帮助

”生成地图(网格列表)的子例程
子代映射()
Dim reader作为StreamReader=File.OpenText(“map1.txt”)
Dim gridHolder作为新的clsGrid
'streamreader偷看地图文件。如果其中没有任何内容,则会显示警告。
如果reader.Peek=CInt(reader.EndOfStream),则
Show(“映射文件已损坏或缺少数据。”)
reader.Close()
其他的
'如果映射文件包含信息,则读取X和Y计数
intXCount=CInt(reader.ReadLine)
intYCount=CInt(reader.ReadLine)
'读取网格属性,直到文件结束
Do Until reader.Peek=CInt(reader.EndOfStream)
gridHolder.TerrainType=CInt(reader.ReadLine)
gridHolder.MovementCost=CInt(reader.ReadLine)
gridHolder.DefensiveBonus=CInt(reader.ReadLine)
gridHolder.ID=listMap.Count
添加(gridHolder)
环
reader.Close()
如果结束
端接头
'此函数返回给定X和Y坐标的栅格对象
函数lookupGrid(ByVal intX作为整数,ByVal intY作为整数)作为clsGrid
作为整数的Dim I
Dim gridHolder作为新的clsGrid
'此公式根据栅格的x和y位置查找栅格的索引号
I=((intX*intYCount)+intY)
gridHolder=listMap.Item(I)
MessageBox.Show(gridHolder.ID.ToString)
回程格栅架
端函数

在GenerateMap中,Do-Until循环每次通过向列表中添加对同一clsGrid实例(gridHolder)的引用。由于所有列表项都引用同一实例,因此无论索引I如何,消息框都会显示相同的结果


每次通过循环时,都需要创建一个新的clsGrid实例。一种方法是添加行“gridHolder=newclsgrid”作为循环中的第一行。然后,您还可以从现有的Dim语句中删除“新建”一词

在GenerateMap中,Do-Until循环每次都会向列表中添加对同一clsGrid实例(gridHolder)的引用。由于所有列表项都引用同一实例,因此无论索引I如何,消息框都会显示相同的结果

每次通过循环时,都需要创建一个新的clsGrid实例。一种方法是添加行“gridHolder=newclsgrid”作为循环中的第一行。然后,您还可以从现有的Dim语句中删除“新建”一词