Extends IEnumerable

   
 

using System;
using System.Collections.Generic;
using System.Text;

using System.Collections;

public class Employee {
    public int currAge;
    public string fName, lName;

    public Employee() { }
    public Employee(string firstName, string lastName, int age) {
        currAge = age;
        fName = firstName;
        lName = lastName;
    }

    public override string ToString() {
        return string.Format("{0}, {1} is {2} years old",
            lName, fName, currAge);
    }
}
public class PeopleCollection : IEnumerable {
    private ArrayList arPeople = new ArrayList();
    public PeopleCollection() { }
    public Employee GetEmployee(int pos) { return (Employee)arPeople[pos]; }
    public void AddEmployee(Employee p) { arPeople.Add(p); }
    public void ClearPeople() { arPeople.Clear(); }
    public int Count { get { return arPeople.Count; } }
    IEnumerator IEnumerable.GetEnumerator() { return arPeople.GetEnumerator(); }
}
class Program {
    static void Main(string[] args) {
        PeopleCollection myPeople = new PeopleCollection();
        myPeople.AddEmployee(new Employee("Homer", "Simpson", 40));
        myPeople.AddEmployee(new Employee("Marge", "Simpson", 38));
        myPeople.AddEmployee(new Employee("Lisa", "Simpson", 9));
        myPeople.AddEmployee(new Employee("Bart", "Simpson", 7));
        myPeople.AddEmployee(new Employee("Maggie", "Simpson", 2));

        foreach (Employee p in myPeople)
            Console.WriteLine(p);
    }
}

    


iterates a collection forward and reverse

   
 

using System;
using System.Collections.Generic;
public class Starter {
    public static void Main() {
        Console.WriteLine("Forward List");
        MyClass obj = new MyClass();
        foreach (int item in obj) {
            Console.Write(item);
        }

        Console.WriteLine("
Reverse List");
        foreach (int item in obj.Reverse) {
            Console.Write(item);
        }
    }
}

public class MyClass {

    private int[] list1 = new int[] { 0, 2, 4, 6, 8 };

    public IEnumerator<int> GetEnumerator() {
        for (int index = 0; index < 5; ++index) {
            yield return list1&#91;index&#93;;
        }
    }

    public IEnumerable<int> Reverse {
        get {
            for (int index = 4; index >= 0; --index) {
                yield return list1[index];
            }
        }

    }
}

    


Return IEnumerable by yield

   
 

using System;
using System.Collections;

public class Starter {
    public static void Main() {
        foreach (string day in ToEndOfMonth()) {
            Console.WriteLine(day);
        }
    }

    public static IEnumerable ToEndOfMonth() {
        DateTime date = DateTime.Now;

        int currMonth = date.Month;
        while (currMonth == date.Month) {
            string temp = currMonth.ToString() + "/" + date.Day.ToString();
            date = date.AddDays(1);
            yield return temp;
        }
    }
}

    


return IEnumerable

   
 


using System;
using System.Collections.Generic;

class IteratorDemo {
    static IEnumerable<int> OneTwoThree() {
        Console.WriteLine("Returning 1");
        yield return 1;
        Console.WriteLine("Returning 2");
        yield return 2;
        Console.WriteLine("Returning 3");
        yield return 3;
    }
    static void Main() {
        foreach (var number in OneTwoThree()) {
            Console.WriteLine(number);
        }
    }
}

    


yield return

   
 
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

class Program {
    public static IEnumerable<string> SimpleList() {
        yield return "1";
        yield return "2";
        yield return "3";
    }

    public static void Main(string[] args) {
        foreach (String item in SimpleList())
            Console.WriteLine(item);

    }
}

    


The Dispose Pattern

   
 
using System;


public class MyClass {
    private string name;
    public MyClass(string name) { this.name = name; }
    override public string ToString() { return name; }
    ~MyClass() { Console.WriteLine("~MyClass()"); }
    public void Dispose() {
        Console.WriteLine("Dispose()");
    }
}

public class GarbageDisposalApp {
    public static void Main(string[] args) {
        DoSomething();
        Console.WriteLine("end of Main");
    }
    public static void DoSomething() {
        MyClass t = new MyClass("Foo");
        Console.WriteLine(t);
        t.Dispose();
        t = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }
}