ITPub博客

首页 > > > C# 循环中的匿名方法

C# 循环中的匿名方法

作者:Ruiyuan Li 时间:2015-01-20 00:00:00 0 删除 编辑

有这么一段C#代码:

Func 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 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[] func = new Func[] {
    ()=>{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[] func = new Func[] {
    ()=>{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# 循环中的匿名方法
<!-- -->

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-05-21

  • 博文量
    495
  • 访问量
    4826