ルーグの備忘録

主にC#についてまとめてます。

【C#】ジェネリクス

ジェネリクスとは

型をパラメタとして与えられるようにすることで、型違いで同じ内容のクラスや関数を生成できるという仕組み。上手く使うとクラスや関数を型の数だけ定義する手間が省ける。
日本語だと総称的プログラミング(generic programming)。

活用例

二次元配列で指定されたindexを中心として、周囲の要素をDictionaryで取れるようにする構造体。

/// <summary>
/// 周囲のセルを取得
/// </summary>
public readonly struct AroundCell<T>
{
    public T CenterCell { get; }
    public Dictionary<DIRECTION, T> AroundCells { get; }

    public AroundCell(T[,] map, int centerX, int centerZ)
    {
        CenterCell = map[centerX, centerZ];
        AroundCells = new Dictionary<DIRECTION, T>();

        int xLength = map.GetLength(0);
        int zLength = map.GetLength(1);

        for (int x = -1; x <= 1; x++)
            for (int z = -1; z <= 1; z++)
            {
                if (x == 0 && z == 0)
                    continue;

                int checkX = centerX + x;
                int checkZ = centerZ + z;

                if (checkX >= 0 && checkX < xLength && checkZ >= 0 && checkZ < zLength)
                {
                    var dir = Positional.GetDirection(x, z);
                    AroundCells.Add(dir, map[checkX, checkZ]);
                }
            }
    }
}

参考

ufcpp.net