如何正确包装字典并公开枚举器

本文关键字:枚举 包装 何正确 字典 | 更新日期: 2023-09-27 18:35:13

我正在将字典封装在我的对象中。 如何公开 IEnumerable>?

以前

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);
       }
}

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);
       }
}

如何正确包装字典<T,U>并公开枚举器

实现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);
   }
}