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 条评论