Use ToDictionary with IEqualityComparer in CSharp
Description
The following code shows how to use ToDictionary with IEqualityComparer.
Example
/* www .j a v a 2 s. co m*/
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
public class Employee2 {
public string id;
public string firstName;
public string lastName;
public static ArrayList GetEmployeesArrayList() {
ArrayList al = new ArrayList();
al.Add(new Employee2 { id = "1", firstName = "J", lastName = "R" });
al.Add(new Employee2 { id = "2", firstName = "W", lastName = "G" });
al.Add(new Employee2 { id = "3", firstName = "A", lastName = "H"});
al.Add(new Employee2 { id = "4", firstName = "D", lastName = "L" });
al.Add(new Employee2 { id = "101", firstName = "K", lastName = "F" });
return (al);
}
public static Employee2[] GetEmployeesArray() {
return ((Employee2[])GetEmployeesArrayList().ToArray(typeof(Employee2)));
}
}
public class MyStringifiedNumberComparer : IEqualityComparer<string> {
public bool Equals(string x, string y) {
return (Int32.Parse(x) == Int32.Parse(y));
}
public int GetHashCode(string obj) {
return Int32.Parse(obj).ToString().GetHashCode();
}
}
public class MainClass {
public static void Main() {
Dictionary<string, string> eDictionary = Employee2.GetEmployeesArray()
.ToDictionary(k => k.id,i => string.Format("{0} {1}",i.firstName, i.lastName),new MyStringifiedNumberComparer());
string name = eDictionary["2"];
Console.WriteLine("Employee whose id == \"2\" : {0}", name);
name = eDictionary["000002"];
Console.WriteLine("Employee whose id == \"000002\" : {0}", name);
}
}
The code above generates the following result.