0

配列オブジェクトのフィールドをその座標で1行でアドレス指定する方法はありますか?

私はこの配列を持っています:Tile[,] Tiles。タイルの1つを変更する必要があり、インデックスを事前に知っている場合は常に、次のようにしますTiles[1, 2] = new Tile(args);

しかし、それらを計算する必要がある場合、次のようになります。

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

タイルのインデックスを一時変数に毎回保存すると、混乱し、読みにくくなることがあります。インデックスを他のPoint何かとして取得し、1行でターゲット配列要素を操作する方法はありますか?


UPD:今や私には明らかです…</ p>

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

…配列内のタイルは変更されませんが…</p>

GetTile(point).field = value;

…します!

4

2 に答える 2

3

ヘルパーメソッドを作成しますGetTargetTile...あなたと同じですGetTargetTileIndicesが、代わりにPoint実際のメソッドを返します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が値型(struct)の場合、このメソッドからコピーが返されるため、そのプロパティの1つを変更するとコピーが変更され、役に立たないことに注意してください。

このメソッドを使用すると、コードは単純に次のようになります。

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