Как я могу получить доступ к свойствам объекта в списке? - PullRequest
0 голосов
/ 28 июня 2018

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))
    };

В методе рисования моей игры я хочу иметь доступ к прямоугольнику, специфичному для этого острова, например, вместо того, чтобы писать:

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 или что-то? Я чувствую, что есть какой-то способ сделать это с Линком, но я не уверен.

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете сделать пару разных вещей:

  1. Использование списка

    Island theIsland = islands.Find(x => x.IslandName == "ShepherdsLookout");
    
  2. Использование словаря обеспечит лучшую производительность.

    Dictionary<string, Island> islands = new Dictionary<string, Island>();
    

    // Загрузка данных словаря Остров theIsland = острова ["ShephardsLookout"];

В любом случае вы бы использовали просто:

theIsland.Position 

Для получения значения

...