2011-09-20 27 views
0

如何減少此_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 
+0

開始,OneTouch和ReverseTouch從共同的祖先繼承嗎? –

+0

是的,他們都繼承了瓷磚類 –

回答

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

+0

所以有沒有簡單的方法,我可以用這個字典? –

+0

是的,但它是一個不同的問題...... x.GroupBy(tile => tile.Type.ToLower())將按類型對實體進行分組 –