How do I correctly wrap a Dictionary<T,U> and expose an enumerator?

c#, dictionary, encapsulation, ienumerable, inheritance

Solution

Implement `IEnumerable<KeyValuePair<int, SummaryEntity>>`

class HashRunningTotalDB : IEnumerable<KeyValuePair<int, SummaryEntity>>
{
   Dictionary<int, SummaryEntity> thisHashRunningTotalDB =
      new Dictionary<int, SummaryEntity>();

   public IEnumerator<KeyValuePair<int, SummaryEntity>> GetEnumerator()
   {
      return thisHashRunningTotalDB.GetEnumerator();
   }

   IEnumerator IEnumerable.GetEnumerator()
   {
      return GetEnumerator();
   }
}

static void Main()
{
   HashRunningTotalDB tempDB = new HashRunningTotalDB();

   // should work now
   foreach(KeyValuePair<int, SummaryEntity> item in tempDB)
   {
       Console.Writeline(item.Key + " " + item.Value.SomeProperty);
   }
}

Problem

I am encapsulating a Dictionary in my object. How do I expose IEnumerable>? Before ``` class HashRunningTotalDB : Dictionary<int, SummaryEntity> { /... } // WORKS! static void Main () { HashRunningTotalDB tempDB = new HashRunningTotalDB(); //todo: load temp DB foreach(var item in tempDB) { Console.Writeline(item.Key + " " + item.Value.SomeProperty); } } ``` After ``` class HashRunningTotalDB : IEnumerable { Dictionary<int, SummaryEntity> thisHashRunningTotalDB = new Dictionary<int, SummaryEntity>(); //QUESTION: HOW DO I IMPLEMENT THE GENERIC ENUMERATOR HERE? // The following doesn't behave the same as the previous implementation IEnumerator IEnumerable.GetEnumerator() { return thisHashRunningTotalDB.GetEnumerator(); } // The following doesn't compile Dictionary<int, SummaryEntity>.Enumerator IEnumerable<Dictionary<int, SummaryEntity>>.GetEnumerator() { return thisHashRunningTotalDB.GetEnumerator(); } } static void Main () { HashRunningTotalDB tempDB = new HashRunningTotalDB(); //todo: load temp DB // NOT WORKING foreach(var item in tempDB) { Console.Writeline(item.Key + " " + item.Value.SomeProperty); } } ```

Original source