当前位置: 首页 > 编程语言 > C# > 正文

C# 3.0入门系列(十二)-Lambda表达式中Lifting

时间:2010-06-13 博客园 Tom Song

Lambda表达式是由匿名方法演化而来的更加高级的形式。关于匿名方法,请参阅http://msdn.microsoft.com/msdnmag/issues/04/05/C20/。关于Lambda表达式的演化,请参阅http://msdn.microsoft.com/msdnmag/issues/07/06/csharp30/default.aspx?loc=zh。英文原版为http://msdn.microsoft.com/msdnmag/issues/07/06/CSharp30/。

1,Lambda表达式中的lifting

在c# 2.0中,匿名方法的使用,是这样的。

class SomeClass
{
  delegate void SomeDelegate();
  public void InvokeMethod()
  {
   SomeDelegate del = delegate()
    {
     MessageBox.Show("Hello");
    };
    del(); 
  }
}

在LINQ 的演变及其对 C# 设计的影响 一文中,其断言如果 lambda 表达式首先被引入语言,那么就不会有对匿名方法的需要了。在本系列前面的一些文章中,也曾提到lambda 表达式,但并没有做太深入的引述。本文所要讲的是Lambda表达式中lifting,将开始和大家体会lambda表达式的一些细节。

编译下面的小程序,看看输出结果,是不是大吃一惊

using System;
using System.Collections.Generic;
using System.Linq;

namespace Tester
{
  class Program
  {
    static void Main(string[] args)
    {
      List<Func<int>> list = new List<Func<int>>();

      for (int i = 0; i < 3; i++)
      {
        list.Add(() => i);
      }

      foreach (var item in list)
      {
        Console.WriteLine(item());
      }
    }
  }
}