迭代: 迭代属性又称迭代器 c#入门经典
IEnumerable 接口负责 使用foreach 循环,重写foreach 循环的方式,或者提供一个定制的实现,并不一定很简单,深入了解foreach循环
(1)调用collectionObject.GetEnumerator(),返回IEnumerator应用,这个方法可以通过IEnumerable接口的实现代码来获得,但这是可选的。
(2)调用所返回的IEnumerator接口的MoveNext()方法。
(3)如果MoveNext()方法返回true,就是用IEnumerator接口的Current属性获取对象的一个引用,用foreach循环。
(4)重复前面两部,知道MoveNext()方法返回false为止,此时循环结束。
IEnumerable与IEnumerator
(1)如果要迭代一个类,可使用GetEnumerator(),其返回类型是IEnumerator。
(2)如果要迭代一个类成员,例如一个方法,则使用IEnumerable
在迭代中使用yield 关键字,如yield return value 下面一个简单的例子;
public static IEnumerable SimpleList
{
yield return "string 1";
yield return "string 2";
yield return "string 3";
}
static void Main(){
foreach(string item in SimpleList())//注意是方法
Console.WriteLine(item); Console.ReadKey();
}
一个遍历一定范围素数的方法 (例子)
1,首先创建一个 类,包含迭代的 IEnumerator GetEnumerator(),接口方法
2,调用,其中 Primer 构造函数 注意默认函数
static void Main() {
Primes prime2To1000=new Primes(2,1000);
foreach(long item in prime2To1000())
Console.Write("{0} ",item)
}
public class Primes
{
private long min;
private long max;
public Primes() : this(2, 200)
{
}
public Primes(long minimum, long maximum)
{
if (min < 2)
min = 2;
else
min = minimum;
max = maximum;
}
public IEnumerator GetEnumerator()
{
for (long possiblePrime = min; possiblePrime <= max; possiblePrime++)
{
bool isPrime = true;
for (long possibleFactor = 2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++)
{
long remainderSfterDivision = possiblePrime % possibleFactor;
if (remainderSfterDivision == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
yield return possiblePrime;
}
}
}
二,迭代器和集合 迭代用于存储在字典集合中对象 无需处理DictionaryItem对象 下面是结合类Animals:
public class Animals:DictionaryBase {
}