3.27. Implementing Nested foreach Functionality in a Class
Problem
You need a class that contains an array
of objects; each of these objects in turn contains an array of
objects. You want to use a nested foreach
loop to
iterate through all objects in both the outer and inner arrays in the
following manner:
foreach (SubSet aSubSet in Set) { foreach (Item i in aSubSet) { // Operate on Item objects contained in the innermost object collection // SomeSubSet, which in turn is contained in another outer collection // called Set } }
Solution
Implement
IEnumerable
on the top-level class as usual, but
also implement IEnumerable
on each of the objects
returned by the top-level enumeration. The following class set
contains an ArrayList
of
SubGroup
objects, and each
SubGroup
object contains an
ArrayList
of Item
objects:
using System; using System.Collections; //----------------------------------------- // // The top-level class // //----------------------------------------- public class Set : IEnumerable { //CONSTRUCTORS public Set( ) {} //FIELDS private ArrayList setArray = new ArrayList( ); //PROPERTIES public int Count { get{return(setArray.Count);} } //METHODS public IEnumerator GetEnumerator( ) { return(new SetEnumerator(this)); } public int AddGroup(string name) { return(setArray.Add(new SubGroup(name))); } public SubGroup GetGroup(int setIndex) { return((SubGroup)setArray[setIndex]); } //NESTED ITEMS public class SetEnumerator : IEnumerator { //CONSTRUCTORS public SetEnumerator(Set theSet) ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.