class My: IEnumerable
{
public IEnumerator GetEnumerator()
{
yield return "one";
yield return "two";
yield return "three";
yield return "!!!";
}
}
class Program
{
static void Main(string[] args)
{
foreach (string s in new My()) Console.WriteLine(s);
Console.ReadKey(); } }
//, ( 1 5)
class Program
{
public static IEnumerable Count(int from, int to)
{
from =1;
while (from <= to) yield return from++;
}
static void Main(string[] args)
{
foreach (int i in Count(1,5)) Console.WriteLine(i);
Console.ReadKey(); } }
, .
, Mas_Monster - , Monster ( GetType()).
class Monster {}
class Daemon: Monster {}
class Mas_Monster: IEnumerable
{
Monster[] mas;
int n;
public Mas_Monster()
{
mas = new Monster[10];
n = 0;
}
public IEnumerator GetEnumerator()
{
for (int i = 0; i < n; i++) yield return mas[i];
}
!!!
public IEnumerable Backwards()
{
for (int i = n-1; i >= 0; i--) yield return mas[i];
}
!!!
public IEnumerable MonsterOnly()
{
for (int i = 0; i < n; i++)
GetType().Name
if (mas [i].GetType().Name=="Monster")
yield return mas[i];
}
public void Add(Monster m)
{
if (n >= 10) return;
mas[n] = m;
n++;
}
}
class Program
{
static void Main(string[] args)
{
Mas_Monster m = new Mas_Monster();
m.Add(new Monster(10, 10, ""));
m.Add(new Daemon (10, 10, "", 5));
Console.WriteLine(" ");
foreach (Monster x in m)
x.Passport();
Console.WriteLine(" ");
foreach (Monster x in m.Backwards())
x.Passport();
Console.WriteLine(" ! ");
foreach (Monster x in m.MonsterOnly())
x.Passport();
Console.ReadKey(); } }
, , get, IEnumerable IEnumerator. :
Yield return ,
Yield break
yield .
, . -, MoveNext() , yield. MoveNext() - , .