如何将List <t>转换为T [,] </t>

时间:2014-01-16 18:54:07

标签: c# xml arrays list multidimensional-array

我正在为游戏创建地图编辑器,我遇到了一些复杂问题。我正在使用多维平铺数组(Tile [,])来存储在地图工作区上绘制的切片,并将这些切片保存到XML,我使用以下代码:

[XmlIgnore]
public Tile[,] Tiles { get; set; }

[XmlElement("Tile")]
[EditorBrowsable(EditorBrowsableState.Never)]
public List<Tile> TileList
{
    get
    {
        var tiles = new List<Tile>();
        for (var x = 0; x < Tiles.GetLength(0); x ++)
        {
            for (var y = 0; y < Tiles.GetLength(1); y ++)
            {
                tiles.Add(Tiles[x, y]);
            }
        }
        return tiles;
    }
}

此代码可让我成功将我创建的任何地图转换为XML格式。 Tiles将源tileset图像位置保持为字符串,tileset图像的源Point位置以及图块上的tile的Point位置。其他属性已成功存储,例如tile标记。

问题是,当我想反序列化这个XML文件以便我可以加载地图时,它在到达TileList属性时会遇到麻烦。我想要做的是将读入的List<Tile>转换为List[,]

我决定使用多维数组来存储切片的原因是因为在程序中使用它更容易,更快捷。使用List执行此操作将导致程序在将更多切片添加到地图工作区时显着减慢。

1 个答案:

答案 0 :(得分:0)

这不就是这样吗?

[XmlIgnore]
public Tile[,] Tiles { get; set; }

[XmlElement("Tile")]
[EditorBrowsable(EditorBrowsableState.Never)]
public List<Tile> TileList
{
    /* existing code */
    set
    {
        Tiles = new Tile[MapWidth, MapHeight];
        for(int i=0;i < value.Count;i++) {
            int x = i % mapWidth;
            int y = i / mapWidth; // integer division truncates so this is ok

            Tiles[x, y] = value[i];
        }
    }
}