static void Main() { var biDictionary = new BiDictionary<int, string, DateTime>( new MultiDictionary<int, Triple<int, string, DateTime>>(true), new MultiDictionary<string, Triple<int, string, DateTime>>(true), new MultiDictionary<CompositeKey<int, string>, Triple<int, string, DateTime>>(true)); biDictionary.AddByFirstKey(1, new Triple<int, string, DateTime>(1, "one", DateTime.Today)); biDictionary.AddBySecondKey("two", new Triple<int, string, DateTime>(2, "two", DateTime.Today)); biDictionary.AddByCompositeKey(new CompositeKey<int, string>(3, "three"), new Triple<int, string, DateTime>(3, "three", DateTime.Today)); Console.WriteLine("Elements: " + biDictionary.Count); Console.WriteLine("T1 keys: " + string.Join(", ", biDictionary.KeysT1)); Console.WriteLine("T2 keys: " + string.Join(", ", biDictionary.KeysT2)); Console.WriteLine("Composite keys: " + string.Join(", ", biDictionary.KeysComposite)); foreach (var key in biDictionary) { foreach (var triple in key.Value) { Console.WriteLine($"Triple: K1: {triple.FirstKey}; K2: {triple.SecondKey}; V: {triple.Value}"); } } }