拓展方法
foreach迭代变量是只读的
枚举器、迭代器
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Spectrum spectra = new Spectrum();
foreach (var VARIABLE in spectra)
{
Console.WriteLine("枚举器:" + VARIABLE);
}
MyClass mc = new MyClass();
foreach (var VARIABLE in mc)
{
Console.WriteLine("迭代器:" + VARIABLE);
}
//LINQ迭代
int[] numbers = {2, 5, 6, 7, 2, 12};
IEnumerable<int> lowNums =
from number in numbers
where number < 10
select number;
foreach (var VARIABLE in lowNums)
{
Console.WriteLine(VARIABLE);
}
Console.ReadLine();
}
}
//迭代器实现
class MyClass {
public IEnumerator<string> GetEnumerator()
{
//IEnumerable<string> myEnumerable = BlockAndWhite();
return BlockAndWhite();
}
public IEnumerator<string> BlockAndWhite()
{
yield return "black";
yield return "gray";
}
}
//枚举器实现
class Spectrum : IEnumerable
{
string[] Colors = {"red", "blue", "yellow"};
public IEnumerator GetEnumerator()
{
return new ColorEnumerator(Colors);
}
}
class ColorEnumerator : IEnumerator
{
string[] _colors;
private int _position = -1;
public ColorEnumerator(string[] colors)
{
_colors = new string[colors.Length];
for (int i = 0; i < colors.Length; i++)
{
_colors[i] = colors[i];
}
}
public bool MoveNext()
{
if (_position < _colors.Length -1)
{
_position++;
return true;
}
else
{
return false;
}
}
public void Reset()
{
_position = -1;
}
public object Current
{
get
{
if (_position == -1) throw new InvalidOperationException();
if (_position > _colors.Length) throw new InvalidOperationException();
return _colors[_position];
}
}
}
}