Заполнение списка классами, текст которых указывает на класс - PullRequest
0 голосов
/ 20 сентября 2011

Как я могу уменьшить это _tile назначение, чтобы я мог сделать одно назначение?

x - анонимный список.

x => List {String name, int x, int y}

и Список _tiles

_tiles.AddRange(from tile in x
where tile.Type.ToLower() == "start".ToLower()
select new Start(this)
{
Position = new Vector2(tile.X, tile.Y),
Texture = _texture2D

});

_tiles.AddRange(from tile in x
where tile.Type.ToLower() == "One".ToLower()
select new OneTouch(this)
{
Position = new Vector2(tile.X, tile.Y),
Texture = _texture2D

});

...

_tiles.AddRange(from tile in x
where tile.Type.ToLower() == "Two".ToLower()
select new ReverseTouch(this)
{
Position = new Vector2(tile.X, tile.Y),
Texture = _texture2D

1 Ответ

0 голосов
/ 20 сентября 2011
IEnumerable<Tile> tiles = x.Select(tile =>
{
  Tile currentTile = null;

  switch (tile.Type.ToLower())
  {
    case "start":
      currentTile = new Start(this);
      break;

    case "One":
      currentTile = new OneTouch(this);
      break;

    case "Two":
      currentTile = new Start(this)
      break;

    ...

    default:
      // You know what to do...
   }

   currentTile.Position = new Vector2(tile.X, tile.Y),
   currentTile.Texture = _texture2D

   return currentTile;
});

Оттуда вы можете создать список, используя tiles.ToList() или заполните существующий, используя _tiles.AddRange(tiles);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...