C#2.0 迭代器
关键字 yield return
using System;
using System.Collections;
public class Persons : IEnumerable
{
string[] m_Names;
public Persons(params string[] Names)
{
m_Names = new string[Names.Length];
Names.CopyTo(m_Names,0);
}
public IEnumerator GetEnumerator()
{
foreach (string s in m_Names)
{
yield return s;
}
}
}
class Program
{
static void Main(string[] args)
{
Persons arrPersons = new Persons(“Michel”,”Christine”,”Mathieu”,”Julien”);
foreach (string s in arrPersons)
{
Console.WriteLine(s);
Console.ReadLine();
}
}
}
using System.Collections;
public class Persons : IEnumerable
{
string[] m_Names;
public Persons(params string[] Names)
{
m_Names = new string[Names.Length];
Names.CopyTo(m_Names,0);
}
public IEnumerator GetEnumerator()
{
foreach (string s in m_Names)
{
yield return s;
}
}
}
class Program
{
static void Main(string[] args)
{
Persons arrPersons = new Persons(“Michel”,”Christine”,”Mathieu”,”Julien”);
foreach (string s in arrPersons)
{
Console.WriteLine(s);
Console.ReadLine();
}
}
}
别被yield return关键字的行为所困扰。Yield return关键字看起来像是返回了一个字符串但是实际上是通过调用GetEnumerator()方法返回了Ienumerable这个对象。既然我们不能明确的提供这样的实现,那么该由那个类实现IEnumerator的返回呢。本文将对此展开讨论并深入到Csharp2.0迭代器基本原理揭示这些神秘的东西。
using System;
using System.Collections;
public class Persons : IEnumerable
{
string[] m_Names;
public Persons(params string[] Names)
{
m_Names = new string[Names.Length];
Names.CopyTo(m_Names,0);
}
public IEnumerator GetEnumerator()
{
yield return "Michel";
yield return "Chirstine";
yield return "Mathieu";
yield return "Julien";
}
}
class Program
{
static void Main(string[] args)
{
Persons arrPersons = new Persons("Michel","Christine","Mathieu","Julien");
foreach (string s in arrPersons)
{
Console.WriteLine(s);
Console.ReadLine();
}
}
}
using System.Collections;
public class Persons : IEnumerable
{
string[] m_Names;
public Persons(params string[] Names)
{
m_Names = new string[Names.Length];
Names.CopyTo(m_Names,0);
}
public IEnumerator GetEnumerator()
{
yield return "Michel";
yield return "Chirstine";
yield return "Mathieu";
yield return "Julien";
}
}
class Program
{
static void Main(string[] args)
{
Persons arrPersons = new Persons("Michel","Christine","Mathieu","Julien");
foreach (string s in arrPersons)
{
Console.WriteLine(s);
Console.ReadLine();
}
}
}
这段程序将同样产生以下输出
MichelChristine
Mathieu
Julien
未完待续。。。。。