【发布时间】:2015-07-30 14:52:21
【问题描述】:
我的班级有两个集合,我正在使用GetEnumerator 方法。我也想在这个意义上为我的班级提供GetEnumerator,在第一次收集之后首先进行枚举,然后再进行第二次。
是否准备好在 C# 中使用一些 ComboEnumerator 类?
好奇的人的小背景——第一个集合来自我对Dictionary 的实现,第二个集合实际上只是一个单独的元素,可选的,包装在数组中。我想为其提供枚举器的类是NullDictionary,它派生自第一个Dictionary。所以我在寻找:
public override IEnumerator<KeyValuePair<K, V>> GetEnumerator()
{
if (nullValue.HasValue)
return ComboEnumerator.Create(
new []{new KeyValuePair<K, V>(null, nullValue.Value)}.GetEnumerator(),
base.GetEnumerator());
else
return base.GetEnumerator();
}
更新:我有自己的实现,这不是“如何实现XYZ”的问题。
【问题讨论】:
-
您在寻找Enumerable.Concat吗?
-
@MichaelLiu,不,我正在寻找组合枚举器而不是枚举器,枚举器提供枚举器,它们是两个不同的实体。
-
由于
IEnumerator<T>(与IEnumerable<T>不同)必须实现IDisposable,因此任务并非微不足道(您必须处理不同的资源取决于执行分支)。为IEnumerable<T>(和Concat())重新设计可能是一个更简单的选择。 -
@DmitryBychenko,我认为没有任何困难(我已经实现了它;任何击中组合枚举器的东西都应该击中原始枚举器,所以这个组合枚举器只是一个代理),但正如我们所知“不要重新发明轮子”我正在寻找 C# 框架内的东西以供使用。
标签: c# concatenation enumerator