<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FClass_Interface%2FIEnumerable</id>
		<title>Csharp/C Sharp/Class Interface/IEnumerable - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FClass_Interface%2FIEnumerable"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IEnumerable&amp;action=history"/>
		<updated>2026-04-29T15:18:11Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IEnumerable&amp;diff=614&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IEnumerable&amp;diff=614&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IEnumerable&amp;diff=615&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IEnumerable&amp;diff=615&amp;oldid=prev"/>
				<updated>2010-05-26T11:39:10Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Enumerator Example (Versioned Collection)==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
public class Starter {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        MyCollection simple = new MyCollection(new object[] { 1, 2, 3, 4, 5, 6, 7 });&lt;br /&gt;
        IEnumerator enumerator = simple.GetEnumerator();&lt;br /&gt;
        enumerator.MoveNext();&lt;br /&gt;
        Console.WriteLine(enumerator.Current);&lt;br /&gt;
        enumerator.MoveNext();&lt;br /&gt;
        simple[4] = 10;&lt;br /&gt;
        Console.WriteLine(enumerator.Current);&lt;br /&gt;
        enumerator.MoveNext();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MyCollection : IEnumerable {&lt;br /&gt;
    public MyCollection(object[] array) {&lt;br /&gt;
        items = array;&lt;br /&gt;
        version = 1;&lt;br /&gt;
    }&lt;br /&gt;
    public object this[int index] {&lt;br /&gt;
        get {&lt;br /&gt;
            return items[index];&lt;br /&gt;
        }&lt;br /&gt;
        set {&lt;br /&gt;
            ++version;&lt;br /&gt;
            items[index] = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public IEnumerator GetEnumerator() {&lt;br /&gt;
        return new Enumerator(this);&lt;br /&gt;
    }&lt;br /&gt;
    private class Enumerator : IEnumerator {&lt;br /&gt;
        public Enumerator(MyCollection obj) {&lt;br /&gt;
            oThis = obj;&lt;br /&gt;
            cursor = -1;&lt;br /&gt;
            version = oThis.version;&lt;br /&gt;
        }&lt;br /&gt;
        public bool MoveNext() {&lt;br /&gt;
            ++cursor;&lt;br /&gt;
            if (cursor &amp;gt; (oThis.items.Length - 1)) {&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
        public void Reset() {&lt;br /&gt;
            cursor = -1;&lt;br /&gt;
        }&lt;br /&gt;
        public object Current {&lt;br /&gt;
            get {&lt;br /&gt;
                if (oThis.version != version) {&lt;br /&gt;
                    throw new InvalidOperationException(&amp;quot;Collection was modified&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                if (cursor &amp;gt; (oThis.items.Length - 1)) {&lt;br /&gt;
                    throw new InvalidOperationException(&amp;quot;Enumeration already finished&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                if (cursor == -1) {&lt;br /&gt;
                    throw new InvalidOperationException(&amp;quot;Enumeration not started&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                return oThis.items[cursor];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        private int version;&lt;br /&gt;
        private int cursor;&lt;br /&gt;
        private MyCollection oThis;&lt;br /&gt;
    }&lt;br /&gt;
    private object[] items = null;&lt;br /&gt;
    private int version;&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Extends IEnumerable==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
public class Employee {&lt;br /&gt;
    public int currAge;&lt;br /&gt;
    public string fName, lName;&lt;br /&gt;
    public Employee() { }&lt;br /&gt;
    public Employee(string firstName, string lastName, int age) {&lt;br /&gt;
        currAge = age;&lt;br /&gt;
        fName = firstName;&lt;br /&gt;
        lName = lastName;&lt;br /&gt;
    }&lt;br /&gt;
    public override string ToString() {&lt;br /&gt;
        return string.Format(&amp;quot;{0}, {1} is {2} years old&amp;quot;,&lt;br /&gt;
            lName, fName, currAge);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class PeopleCollection : IEnumerable {&lt;br /&gt;
    private ArrayList arPeople = new ArrayList();&lt;br /&gt;
    public PeopleCollection() { }&lt;br /&gt;
    public Employee GetEmployee(int pos) { return (Employee)arPeople[pos]; }&lt;br /&gt;
    public void AddEmployee(Employee p) { arPeople.Add(p); }&lt;br /&gt;
    public void ClearPeople() { arPeople.Clear(); }&lt;br /&gt;
    public int Count { get { return arPeople.Count; } }&lt;br /&gt;
    IEnumerator IEnumerable.GetEnumerator() { return arPeople.GetEnumerator(); }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main(string[] args) {&lt;br /&gt;
        PeopleCollection myPeople = new PeopleCollection();&lt;br /&gt;
        myPeople.AddEmployee(new Employee(&amp;quot;Homer&amp;quot;, &amp;quot;Simpson&amp;quot;, 40));&lt;br /&gt;
        myPeople.AddEmployee(new Employee(&amp;quot;Marge&amp;quot;, &amp;quot;Simpson&amp;quot;, 38));&lt;br /&gt;
        myPeople.AddEmployee(new Employee(&amp;quot;Lisa&amp;quot;, &amp;quot;Simpson&amp;quot;, 9));&lt;br /&gt;
        myPeople.AddEmployee(new Employee(&amp;quot;Bart&amp;quot;, &amp;quot;Simpson&amp;quot;, 7));&lt;br /&gt;
        myPeople.AddEmployee(new Employee(&amp;quot;Maggie&amp;quot;, &amp;quot;Simpson&amp;quot;, 2));&lt;br /&gt;
        foreach (Employee p in myPeople)&lt;br /&gt;
            Console.WriteLine(p);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IEnumerable with a foreach loop==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        IEnumerable&amp;lt;char&amp;gt; query = &amp;quot;Not what you might expect&amp;quot;;&lt;br /&gt;
        foreach (char vowel in &amp;quot;aeiou&amp;quot;)&lt;br /&gt;
            query = query.Where(c =&amp;gt; c != vowel);&lt;br /&gt;
        foreach (char c in query) Console.Write(c); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==iterates a collection forward and reverse==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
public class Starter {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Forward List&amp;quot;);&lt;br /&gt;
        MyClass obj = new MyClass();&lt;br /&gt;
        foreach (int item in obj) {&lt;br /&gt;
            Console.Write(item);&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(&amp;quot;\nReverse List&amp;quot;);&lt;br /&gt;
        foreach (int item in obj.Reverse) {&lt;br /&gt;
            Console.Write(item);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MyClass {&lt;br /&gt;
    private int[] list1 = new int[] { 0, 2, 4, 6, 8 };&lt;br /&gt;
    public IEnumerator&amp;lt;int&amp;gt; GetEnumerator() {&lt;br /&gt;
        for (int index = 0; index &amp;lt; 5; ++index) {&lt;br /&gt;
            yield return list1[index];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public IEnumerable&amp;lt;int&amp;gt; Reverse {&lt;br /&gt;
        get {&lt;br /&gt;
            for (int index = 4; index &amp;gt;= 0; --index) {&lt;br /&gt;
                yield return list1[index];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==return IEnumerable==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
class IteratorDemo {&lt;br /&gt;
    static IEnumerable&amp;lt;int&amp;gt; OneTwoThree() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Returning 1&amp;quot;);&lt;br /&gt;
        yield return 1;&lt;br /&gt;
        Console.WriteLine(&amp;quot;Returning 2&amp;quot;);&lt;br /&gt;
        yield return 2;&lt;br /&gt;
        Console.WriteLine(&amp;quot;Returning 3&amp;quot;);&lt;br /&gt;
        yield return 3;&lt;br /&gt;
    }&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        foreach (var number in OneTwoThree()) {&lt;br /&gt;
            Console.WriteLine(number);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Return IEnumerable by yield==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
public class Starter {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        foreach (string day in ToEndOfMonth()) {&lt;br /&gt;
            Console.WriteLine(day);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public static IEnumerable ToEndOfMonth() {&lt;br /&gt;
        DateTime date = DateTime.Now;&lt;br /&gt;
        int currMonth = date.Month;&lt;br /&gt;
        while (currMonth == date.Month) {&lt;br /&gt;
            string temp = currMonth.ToString() + &amp;quot;/&amp;quot; + date.Day.ToString();&lt;br /&gt;
            date = date.AddDays(1);&lt;br /&gt;
            yield return temp;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tree Enumerator==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
public class Tree&amp;lt;TItem&amp;gt; : IEnumerable&amp;lt;TItem&amp;gt; where TItem : IComparable&amp;lt;TItem&amp;gt; {&lt;br /&gt;
    public Tree(TItem nodeValue) {&lt;br /&gt;
        this.NodeData = nodeValue;&lt;br /&gt;
        this.LeftTree = null;&lt;br /&gt;
        this.RightTree = null;&lt;br /&gt;
    }&lt;br /&gt;
    public void Insert(TItem newItem) {&lt;br /&gt;
        TItem currentNodeValue = this.NodeData;&lt;br /&gt;
        if (currentNodeValue.rupareTo(newItem) &amp;gt; 0) {&lt;br /&gt;
            if (this.LeftTree == null) {&lt;br /&gt;
                this.LeftTree = new Tree&amp;lt;TItem&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.LeftTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            if (this.RightTree == null) {&lt;br /&gt;
                this.RightTree = new Tree&amp;lt;TItem&amp;gt;(newItem);&lt;br /&gt;
            } else {&lt;br /&gt;
                this.RightTree.Insert(newItem);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public void WalkTree() {&lt;br /&gt;
        if (this.LeftTree != null) {&lt;br /&gt;
            this.LeftTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
        Console.WriteLine(this.NodeData.ToString());&lt;br /&gt;
        if (this.RightTree != null) {&lt;br /&gt;
            this.RightTree.WalkTree();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    public TItem NodeData { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TItem&amp;gt; LeftTree { get; set; }&lt;br /&gt;
    public Tree&amp;lt;TItem&amp;gt; RightTree { get; set; }&lt;br /&gt;
&lt;br /&gt;
    IEnumerator&amp;lt;TItem&amp;gt; IEnumerable&amp;lt;TItem&amp;gt;.GetEnumerator() {&lt;br /&gt;
        return new TreeEnumerator&amp;lt;TItem&amp;gt;(this);&lt;br /&gt;
    }&lt;br /&gt;
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
class TreeEnumerator&amp;lt;T&amp;gt; : IEnumerator&amp;lt;T&amp;gt; where T : IComparable&amp;lt;T&amp;gt; {&lt;br /&gt;
    public TreeEnumerator(Tree&amp;lt;T&amp;gt; data) {&lt;br /&gt;
        this.currentData = data;&lt;br /&gt;
    }&lt;br /&gt;
    private void populate(Queue&amp;lt;T&amp;gt; enumQueue, Tree&amp;lt;T&amp;gt; tree) {&lt;br /&gt;
        if (tree.LeftTree != null) {&lt;br /&gt;
            populate(enumQueue, tree.LeftTree);&lt;br /&gt;
        }&lt;br /&gt;
        enumQueue.Enqueue(tree.NodeData);&lt;br /&gt;
        if (tree.RightTree != null) {&lt;br /&gt;
            populate(enumQueue, tree.RightTree);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    private Tree&amp;lt;T&amp;gt; currentData = null;&lt;br /&gt;
    private T currentItem = default(T);&lt;br /&gt;
    private Queue&amp;lt;T&amp;gt; enumData = null;&lt;br /&gt;
    T IEnumerator&amp;lt;T&amp;gt;.Current {&lt;br /&gt;
        get {&lt;br /&gt;
            if (this.enumData == null)&lt;br /&gt;
                throw new InvalidOperationException(&amp;quot;Use MoveNext before calling Current&amp;quot;);&lt;br /&gt;
            return this.currentItem;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    void IDisposable.Dispose() {&lt;br /&gt;
        // throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
    object System.Collections.IEnumerator.Current {&lt;br /&gt;
        get { throw new NotImplementedException(); }&lt;br /&gt;
    }&lt;br /&gt;
    bool System.Collections.IEnumerator.MoveNext() {&lt;br /&gt;
        if (this.enumData == null) {&lt;br /&gt;
            this.enumData = new Queue&amp;lt;T&amp;gt;();&lt;br /&gt;
            populate(this.enumData, this.currentData);&lt;br /&gt;
        }&lt;br /&gt;
        if (this.enumData.Count &amp;gt; 0) {&lt;br /&gt;
            this.currentItem = this.enumData.Dequeue();&lt;br /&gt;
            return true;&lt;br /&gt;
        }&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    void System.Collections.IEnumerator.Reset() {&lt;br /&gt;
        throw new NotImplementedException();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Program {&lt;br /&gt;
    static void Main(string[] args) {&lt;br /&gt;
        Tree&amp;lt;int&amp;gt; tree1 = new Tree&amp;lt;int&amp;gt;(10);&lt;br /&gt;
        tree1.Insert(5);&lt;br /&gt;
        tree1.Insert(11);&lt;br /&gt;
        tree1.Insert(5);&lt;br /&gt;
        tree1.Insert(-12);&lt;br /&gt;
        tree1.Insert(15);&lt;br /&gt;
        tree1.Insert(0);&lt;br /&gt;
        tree1.Insert(14);&lt;br /&gt;
        tree1.Insert(-8);&lt;br /&gt;
        tree1.Insert(10);&lt;br /&gt;
        foreach (int item in tree1)&lt;br /&gt;
            Console.WriteLine(item);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==yield return==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Text;&lt;br /&gt;
class Program {&lt;br /&gt;
    public static IEnumerable&amp;lt;string&amp;gt; SimpleList() {&lt;br /&gt;
        yield return &amp;quot;1&amp;quot;;&lt;br /&gt;
        yield return &amp;quot;2&amp;quot;;&lt;br /&gt;
        yield return &amp;quot;3&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    public static void Main(string[] args) {&lt;br /&gt;
        foreach (String item in SimpleList())&lt;br /&gt;
            Console.WriteLine(item);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>