0

有没有办法用一行的坐标来处理数组对象的字段?

我有这个数组:Tile[,] Tiles。每当我需要更改其中一个图块并且我事先知道索引时,我都会这样做Tiles[1, 2] = new Tile(args);

但是当我必须计算它们时,它看起来像这样:

Point p = GetTargetTileIndices(args);
Tiles[p.X, p.Y].someField = 127;

每次将磁贴的索引存储在临时变量中会让人感到困惑,有时甚至难以阅读。有没有办法让索引作为Point或其他东西并在一行中使用目标数组元素?


UPD:我现在很清楚这样做……</p>

var tile = GetTile(point);
tile.field = value;

…不改变数组中的瓦片,但是…</p>

GetTile(point).field = value;

…做!

4

2 回答 2

3

创建一个GetTargetTile辅助方法......就像你的GetTargetTileIndicesPoint它返回实际的而不是Tile

于 2012-12-31T20:13:04.117 回答
1

只需编写自己的方法:

public static class Extensions
{
    public static T GetValue<T>(this T[,] array, Point point)
    {
        return array[point.X, point.Y];
    }

    public static void SetValue<T>(this T[,] array, Point point, T value)
    {
        array[point.X, point.Y] = value;
    }
}

请注意,如果这里Tiles是一个值类型(结构),那么您将从该方法中获取一个副本,因此修改它的一个属性将修改一个副本并且不会有帮助。

使用这种方法,你的代码就变成了:

Tiles.GetValue(GetTileIndices()).byte = 8;
于 2012-12-31T20:18:34.320 回答