2010年3月4日木曜日

[.NET]知らなかったコレクション(KeyedCollection)

先日何気に、MSDNを見ていると、使ったことがないコレクション系のクラスをいくつか見つけました。
ということで今回はKeyedCollection。
格納したい情報の中にキーが含まれる場合に、キーを個別に設定するのではなく、格納するオブジェクトの中に含まれるプロパティを使う。というものです。コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    MyKeyedCollection collection = new MyKeyedCollection();
    collection.Add(new MyItem() { key = 1, value1 = "111" });
    collection.Add(new MyItem() { key = 2, value1 = "222" });
    collection.Add(new MyItem() { key = 3, value1 = "333" });
    collection.Add(new MyItem() { key = 4, value1 = "444" });

    System.Diagnostics.Debug.WriteLine(collection[2L].ToString());

    //「key=2, value1=222, value2=, value3=」と表示された。
}

/// <summary>
/// KeyedCollectionの実装 
/// </summary>
public class MyKeyedCollection : KeyedCollection<long, MyItem>
{
    public MyKeyedCollection() { }

    /// <summary>
    /// 指定した要素からキーを抽出する
    /// </summary>
    /// <param name="item"></param>
    /// <returns></returns>
    protected override long GetKeyForItem(MyItem item)
    {
        // キーの値を返却する.
        return item.key;
    }

}

/// <summary>
/// コレクションに格納するクラス
/// </summary>
public class MyItem
{
    public long key { getset; }
    public string value1 { getset; }
    public string value2 { getset; }
    public string value3 { getset; }

    public override string ToString()
    {
        return string.Format("key={0}, value1={1}, value2={2}, value3={3}", key, value1, value2, value3);

    }
}

0 件のコメント: