用于迭代项集合的集合的通用适配器

时间:2015-07-12 20:39:13

标签: c# generics iterator adapter ienumerable

我正在寻找一个通用的类适配器,它允许我通过单个迭代器迭代对象的集合(IEnumerable IEnumerable)。

换句话说:如何伪造集合集合,让用户看作一个单独的扁平集合。

实施例: 对于这样的结构:

public class Signal
{
  Point[] points;
}

public class Analysis
{
  List<Signal> Signals;
}

我希望有一个通用适配器,使我能够迭代Analysis对象的每个点。

适配器可以让我这样做:

  var analysisInnerCollectionOfPointAdapter = 
  new GenericCollectionOfCollectionAdapterIterator(myAnalysis);

        foreach(Point point in AnalysisInnerCollectionOfPointAdapter)
        {
          ...
        }

我不想创建任何重复的集合。我只是想从迭代中抽象出内部步骤(集合的集合)。

我刚开始尝试对它进行编程,但我想知道是否有一些已经存在的东西可能比我潜在的未来创作更好。也许在像Linq或MoreLinq这样的现有库中?也许你已经做到了并且有一些不错的东西?

编辑(一小时后): 我刚刚发现:Difference Between Select and SelectMany给出了我想要的一个很好的例子。感谢AlexeiLevenkov。

1 个答案:

答案 0 :(得分:0)

几个月后...... AlexeiLevenko没有发布his answer

  

SelectMany不会创建任何副本 - 它类似于大多数其他LINQ操作,例如Select / Where ...不确定您记得的代码是什么?#34;数据副本&#34; (我不相信你可以避免复制价值类型,但看起来OP不需要避免这种情况)......

     

analysis.Signal.SelectMAny(x=>x)仅复制Point,假设它是值类型...