コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】インデクサでインスタンスを配列のように扱う

オブジェクト指向エクササイズの「ファーストクラスコレクション」にしたがって
コレクションを定義するときは下記のようなクラスを作成するようにして、
コレクションの中からオブジェクトを取得したい場合は
Get関数を通じて取得するようにしていたのですが・・・

// キャラクターの一覧を管理するクラス
class CharacterList
{
    private readonly List<Character> list = new List<Character>();

    // 指定されたインデックスのキャラクターを返します
    public ICharacter Get(int index)
    {
        return list[index];
    }
}

var characterList = new CharacterList();
//characterList.Get(0)

C#ならインデクサを使用すれば下記のように綺麗に書けることに気が付きました

class CharacterList
{
    private readonly List<Character> list = new List<Character>();

    // 指定されたインデックスのキャラクターを返します
    public ICharacter this[int index]
    {
        get
        {
            return list[index];
        }
    }
}

var characterList = new CharacterList();
//characterList[0]

IEnumerableやIEnumeratorを使用するともっと使いやすくなるのかも