edit:为了澄清这个问题,我试图通过在列表中存储多个对象(每个对象都需要以不同的位置和方式绘制,并且每个对象都具有自定义属性,例如形状)来收紧我的代码。我希望能够出于各种目的从列表中的任何给定对象访问这些属性之一,例如稍后在程序中绘制列表中该项目唯一的精灵。
我试图访问特定于我创建的列表中每个对象的属性,但似乎无法正确处理。我认为我在列表中缺少一些基本知识!这是我定义岛屿的班级:
class Island
{
public string IslandName { get; set; }
public Vector2 Position { get; set; }
public Rectangle IslandRectangle { get; set; }
public Island(string name, Vector2 position, Rectangle rectangle)
{
name = this.IslandName;
position = this.Position;
rectangle = this.IslandRectangle;
}
}
然后,在我的Main方法中,创建一个新的岛屿列表(目前仅一个):
List<Island> allIslands = new List<Island>()
{
new Island("ShepherdsLookout", new Vector2(200, 200), new Rectangle(200,200, 50, 50))
};
在我的游戏的draw方法中,我希望能够访问特定于该岛的矩形,例如,而不是编写:
spritebatch.draw(sprite, new vector2D(200, 200), new rectangle(200, 200, 50, 50));
我只想做以下伪代码:
spritebatch.draw(sprite, islands.shepherdslookout.position, islands.shepherdslookout.rectangle);
我尝试使用IEnumerable做到这一点:
IEnumerable<Island> ShepherdsLookout = from island in allIslands where island.IslandName == "ShepherdsLookout" select island;
但这似乎也不起作用:/ 我需要一个foreach循环之类的东西吗?我觉得可以使用Linq进行某些操作,但是我不确定。
答案 0 :(得分:4)
您可以做几件事:
使用列表
Col1 Col2
A Yes
A Yes
A No
B NULL
B NULL
B NULL
C No
C Yes
使用字典将提供更好的性能。
Island theIsland = islands.Find(x => x.IslandName == "ShepherdsLookout");
//加载字典数据 Island theIsland = islands [“ ShephardsLookout”];
无论哪种方式,您都只能使用:
Dictionary<string, Island> islands = new Dictionary<string, Island>();
获取值