首页 > 解决方案 > 类的 foreach 函数

问题描述

我创建了以下类:

public class LocationTreeAlsTree
{
    public ComponentRef PartsOfTree { get; set; }
    public class ComponentRef
    {
        public string ID { get; set; }
        public List<ComponentRef> Children { get; set; }
    }

    static List<ComponentRef> LoadUnits(IEnumerable<XElement> 
    _componentenRef)
    {
         return _componentenRef.Select(x => new ComponentRef()
         {
              ID = x.Attribute("ref").Value,
              Children = LoadUnits(x.Elements("componentRef"))
         }).ToList();
    }

    public LocationTreeAlsTree(string _filename)
    {
         // Dateiname des LocationTree-Files
         string locationtreeFile = _filename;

         // Neuer Streamreader um Encoding UTF16 Fehler zu umgehen
         StreamReader reader = new StreamReader(locationtreeFile, Encoding.UTF8);
         XDocument doc = XDocument.Load(reader);

         // Generiere eine Tree-Struktur vom Location Tree
         List<ComponentRef> units = LoadUnits(doc.Descendants("componentRef"));
         //ComponentRef Tree = new ComponentRef();
         PartsOfTree = units.First();
         units = null;
    }
}

我试图在这个类中实现 foreach 函数。我不知道如何为这个类实现 IEnumerable。有人能帮助我吗?

标签: c#classforeach

解决方案


想象一下你想循环遍历SomeClass你可以从 IEnumerable 继承的列表

public class LocationTreeAlsTree : IEnumerable<SomeClass>
{    
     public List<SomeClass> Something; // that is filled somewhere in class

     public IEnumerator<SomeClass> GetEnumerator()
     {
          return Something.GetEnumerator();
     }

     IEnumerator IEnumerable.GetEnumerator()
     {
          return GetEnumerator();
     }
}

现在你可以像这样使用它:

LocationTreeAlsTree tree = new LocationTreeAlsTree();
foreach(var t in tree)
{
    // do something
}

推荐阅读