【问题标题】:Is there combo enumerator ready to use?是否有可以使用的组合枚举器?
【发布时间】: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&lt;T&gt;(与IEnumerable&lt;T&gt;不同)必须实现IDisposable,因此任务并非微不足道(您必须处理不同的资源取决于执行分支)。为IEnumerable&lt;T&gt;(和Concat())重新设计可能是一个更简单的选择。
  • @DmitryBychenko,我认为没有任何困难(我已经实现了它;任何击中组合枚举器的东西都应该击中原始枚举器,所以这个组合枚举器只是一个代理),但正如我们所知“不要重新发明轮子”我正在寻找 C# 框架内的东西以供使用。

标签: c# concatenation enumerator


【解决方案1】:

我认为您正在寻找的这种方法不存在。 如果您只想以标准方式枚举两个集合(返回第一个集合的每个项目,然后返回第二个集合的每个项目),我认为您可以使用 Enumerable.Concat 扩展方法。我看不出您如何以更高效的方式做到这一点。
你可以看到Enumerable.Concat method implementation

如果您想以非标准方式枚举集合(枚举这两个集合有多种方式)我认为您是唯一可以做到的,.net 框架无法为每种方式提供实现枚举两个集合。

【讨论】:

    猜你喜欢
    • 2014-08-04
    • 2013-03-22
    • 2020-04-21
    • 2016-08-31
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多