20
01/2015
C# 循环中的匿名方法
有这么一段C#代码:
Func<int> func = () => { return 0; };
for (int i = 0; i < 3; i++)
{
func = () => { Console.WriteLine(i*i); return i; };
}
Console.WriteLine(func());
Console.ReadKey();猜猜输出的是什么?
结果让人大跌眼镜:
9 3
下面看另外一个例子。
Func<int> func = () => { return 0; };
for (int i = 0; i < 3; i++)
{
string s = i + "";
func = () => { Console.WriteLine(s); return i; };
}
Console.WriteLine(func());
Console.ReadKey();输出的结果是:
2 3
接下来再看两个例子。
Func<int>[] func = new Func<int>[] {
()=>{return 0;},
()=>{return 0;},
()=>{return 0;}
};
for (int i = 0; i < 3; i++)
{
func[i] = () => { Console.WriteLine(i * i); return i; };
}
for (int i = 0; i < 3; i++)
{
Console.WriteLine(func[i]());
}
Console.ReadKey();输出的结果是:
9 3 9 3 9 3
下面一个例子会让你摸不着头脑了:
Func<int>[] func = new Func<int>[] {
()=>{return 0;},
()=>{return 0;},
()=>{return 0;}
};
for (int i = 0; i < 3; i++)
{
string s = i + "";
func[i] = () => { Console.WriteLine(s); return i; };
}
for (int i = 0; i < 3; i++)
{
Console.WriteLine(func[i]());
}
Console.ReadKey();此时输出竟是:
0 3 1 3 2 3
具体原因我尚不清楚,有待深入学习C#。
转载请注明:康瑞部落 » C# 循环中的匿名方法

0 条评论