ということで今回は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 { get; set; }
public string value1 { get; set; }
public string value2 { get; set; }
public string value3 { get; set; }
public override string ToString()
{
return string.Format("key={0}, value1={1}, value2={2}, value3={3}", key, value1, value2, value3);
}
}
{
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 { get; set; }
public string value1 { get; set; }
public string value2 { get; set; }
public string value3 { get; set; }
public override string ToString()
{
return string.Format("key={0}, value1={1}, value2={2}, value3={3}", key, value1, value2, value3);
}
}
0 件のコメント:
コメントを投稿