我在我的对象中封装了一个字典。我如何公开 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);
}
}
最佳答案
实现 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);
}
}
关于c# - 如何正确包装 Dictionary<T,U> 并公开枚举器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712933/