/* You could use a ConcurrentDictionary to store the values. These data structures are optimized for multi-threaded environments and may be faster than a Dictionary. */ class Program { static ConcurrentDictionary h = new ConcurrentDictionary(); static void Main(string[] args) { h.TryAdd(Tee1.None.GetType(), "Tee1 string"); h.TryAdd(Tee2.None.GetType(), "Tee2 string"); Console.WriteLine(h[Tee1.None.GetType()]); // Output : Tee1 string Console.WriteLine(h[Tee2.None.GetType()]); // Output : Tee2 string } } /* You could pre-populate the dictionary */ class Program { static Dictionary h = new Dictionary { { Tee1.None.GetType(), "Tee1 string" }, { Tee2.None.GetType(), "Tee2 string" } }; static void Main(string[] args) { Console.WriteLine(h[Tee1.None.GetType()]); // Output : Tee1 string Console.WriteLine(h[Tee2.None.GetType()]); // Output : Tee2 string } } /* Lastly, you could use a faster hashing algorithm */ using System.Collections.Generic; using System.Linq; class Program { static Dictionary h = new Dictionary(); static void Main(string[] args) { h.Add(Tee1.None.GetType(), "Tee1 string"); h.Add(Tee2.None.GetType(), "Tee2 string"); Console.WriteLine(h[Tee1.None.GetType()]); // Output : Tee1 string Console.WriteLine(h[Tee2.None.GetType()]); // Output : Tee2 string } } // Custom implementation of IEqualityComparer class TypeEqualityComparer : IEqualityComparer { public bool Equals(Type x, Type y) { return x == y; } public int GetHashCode(Type obj) { return MurmurHash3.Hash(obj); } } // Create the dictionary with the custom comparer Dictionary h = new Dictionary(new TypeEqualityComparer());