Counting Enumerable
using System;
using System.Collections;
using System.Collections.Generic;
using System.ruponentModel;
class CountingEnumerable : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
return new CountingEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
class CountingEnumerator : IEnumerator<int>
{
int current = -1;
public bool MoveNext()
{
current++;
return current < 10;
}
public int Current
{
get { return current; }
}
object IEnumerator.Current
{
get { return Current; }
}
public void Reset()
{
throw new NotSupportedException();
}
public void Dispose()
{
}
}
class MainClass
{
static void Main()
{
CountingEnumerable counter = new CountingEnumerable();
foreach (int x in counter)
{
Console.WriteLine(x);
}
}
}
Get list of integer whose value is higher than 10
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
int[] integers = { 1, 6, 2, 27};
IEnumerable<int> twoDigits = from numbers in integers where numbers >= 10 select numbers;
Console.WriteLine("Integers > 10:");
foreach (var number in twoDigits)
{
Console.WriteLine(number);
}
}
}
Implement IEnumerable with loop
using System;
using System.Collections.Generic;
using System.Text;
class MyClass : IEnumerable<string>
{
IEnumerator<string> Letter
{
get
{
string[] s = { "A", "B", "C" };
for (int i = 0; i < s.Length; i++)
yield return s[i];
}
}
public IEnumerator<string> GetEnumerator()
{
return Letter;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return Letter;
}
}
class MainClass
{
static void Main()
{
MyClass mc1 = new MyClass();
foreach (string s in mc1)
Console.Write("{0} ", s);
}
}
A B C
Implement IEnumerable with "yield"
using System;
using System.Collections.Generic;
using System.Text;
class MyClass : IEnumerable<string>
{
IEnumerator<string> Letter
{
get
{
yield return "A";
yield return "B";
yield return "C";
}
}
public IEnumerator<string> GetEnumerator()
{
return Letter;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return Letter;
}
}
class MainClass
{
static void Main()
{
MyClass mc1 = new MyClass();
foreach (string s in mc1)
Console.Write("{0} ", s);
}
}
A B C
Iterator Block Iteration Sample
using System;
using System.Collections;
using System.ruponentModel;
class IteratorBlockIterationSample : IEnumerable
{
object[] values;
int startingPoint;
public IteratorBlockIterationSample(object[] values, int startingPoint)
{
this.values = values;
this.startingPoint = startingPoint;
}
public IEnumerator GetEnumerator()
{
for (int index = 0; index < values.Length; index++)
{
yield return values[(index + startingPoint) % values.Length];
}
}
static void Main()
{
object[] values = { "a", "b", "c", "d", "e" };
IteratorBlockIterationSample collection = new IteratorBlockIterationSample(values, 3);
foreach (object x in collection)
{
Console.WriteLine(x);
}
}
}
Provide different IEnumerable implemetation for one class
using System;
using System.Collections.Generic;
public class Employee
{
public string Name;
public string Title;
public Employee(string name, string title)
{
Name = name;
Title = title;
}
public override string ToString()
{
return string.Format("{0} ({1})", Name, Title);
}
}
public class EmployeeList
{
private List<Employee> employeeList = new List<Employee>();
public IEnumerator<Employee> GetEnumerator()
{
foreach (Employee tm in employeeList)
{
yield return tm;
}
}
public IEnumerable<Employee> Reverse
{
get
{
for (int c = employeeList.Count - 1; c >= 0; c--)
{
yield return employeeList[c];
}
}
}
public IEnumerable<Employee> FirstTwo
{
get
{
int count = 0;
foreach (Employee tm in employeeList)
{
if (count >= 2)
{
yield break;
}
else
{
count++;
yield return tm;
}
}
}
}
public void AddEmployee(Employee member)
{
employeeList.Add(member);
}
}
public class MainClass
{
public static void Main()
{
EmployeeList employeeList = new EmployeeList();
employeeList.AddEmployee(new Employee("A", "AA"));
employeeList.AddEmployee(new Employee("B", "BB"));
employeeList.AddEmployee(new Employee("C", "CC"));
Console.WriteLine("Enumerate using default iterator:");
foreach (Employee member in employeeList)
{
Console.WriteLine(" " + member.ToString());
}
Console.WriteLine("Enumerate using the FirstTwo iterator:");
foreach (Employee member in employeeList.FirstTwo)
{
Console.WriteLine(" " + member.ToString());
}
Console.WriteLine("Enumerate using the Reverse iterator:");
foreach (Employee member in employeeList.Reverse)
{
Console.WriteLine(" " + member.ToString());
}
}
}
Enumerate using default iterator:
A (AA)
B (BB)
C (CC)
Enumerate using the FirstTwo iterator:
A (AA)
B (BB)
Enumerate using the Reverse iterator:
C (CC)
B (BB)
A (AA)
yield value for IEnumerable
using System;
using System.Collections.Generic;
public class MainClass
{
static public IEnumerable<int> Powers( int from,
int to ) {
for( int i = from; i <= to; ++i ) {
yield return (int) Math.Pow( 2, i );
}
}
static void Main() {
IEnumerable<int> powers = Powers( 0, 16 );
foreach( int result in powers ) {
Console.WriteLine( result );
}
}
}
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536