第44条:不要修改绑定变量
class Program
{
static void Main(string[] args)
{
//捕获到闭包中的变量,在使用之前被修改了,则闭包中的值也会被改变;
int index = 0;
Func<IEnumerable<int>> seq = () => Generate(30, () => index++);
index = 20;
foreach (var item in seq())
{
// 20,21,22......49
Console.WriteLine(item);
}
Console.WriteLine("==============");
index = 100;
foreach (var item in seq())
{
//100,101,102....129
Console.WriteLine(item);
}
Console.ReadLine();
}
public static IEnumerable<int> Generate( int count ,Func<int> func)
{
List<int> ls = new List<int>();
for (int i = 0; i < count; i++)
{
ls.Add(func());
}
return ls;
}
}