KeyCollection:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
EmployeeCollection employees =
new EmployeeCollection();
employees.Add(new Employee(1, "Joe"));
employees.Add(new Employee(2, "Jim"));
employees.Add(new Employee(3, "Jane"));
if (employees.Contains(3))
{
Employee emp = employees[3];
Console.WriteLine(
"Employee ID={0}, Name={1}",
emp.ID, emp.Name);
}
Console.ReadLine();
}
}
internal class Employee
{
public readonly int ID;
public string Name;
public Employee(int id, string name)
{
this.ID = id;
this.Name = name;
}
}
internal class EmployeeCollection : KeyedCollection<Int32, Employee>
{
protected override int GetKeyForItem(Employee item)
{
return item.ID;
}
} 1
GroupDictionary:
2
internal class GroupDictionary<T> : Dictionary<String, List<T>>
3
{
4
public void Add(String key, T value)
5
{
6
List<T> list = null;
7
if (!this.ContainsKey(key) || !(this.TryGetValue(key, out list)))
8
{
9
list = new List<T>();
10
this.Add(key, list);
11
}
12
list.Add(value);
13
}
14
}
GroupDictionary:2
internal class GroupDictionary<T> : Dictionary<String, List<T>>3
{4
public void Add(String key, T value)5
{6
List<T> list = null;7
if (!this.ContainsKey(key) || !(this.TryGetValue(key, out list)))8
{9
list = new List<T>();10
this.Add(key, list);11
}12
list.Add(value);13
}14
}
