Anonymous Methods 是 C#2.0的新特性之一,它允许我们在代码中创建一个内置的没有方法名的方法,将代码与委托实例相关联,从而使委托的实例化工作更加直观和方便,提高了代码的可读性和可维护性。下面来看一个简单的匿名方法的使用:private int[] _integers =      { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int[] evenIntegers = Array.FindAll(_integers, delegate(int integer)
                           {
                               return (integer%2 == 0);
                           }
    );上面的代码使用了匿名方法来获得数组中能被2整除的数,其中的匿名方法是:delegate(int integer)
    {
        return (integer%2 == 0);
    }如果我们不用匿名方法,我们就需要专门创建一个方法,如下:private int[] _integers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int[] evenIntegers = Array.FindAll(_integers, IsEven);private bool IsEven(int integer)
{
    return (integer%2 == 0);
}匿名方法用于那种方法比较简单,而且不会在其他地方被调用的情况,我们还可以像下面这样用匿名方法:button1.Click +=    delegate
        {
            MessageBox.Show("Hello");
        };

解决方案 »

  1.   

    1.匿名方法在C#1.0中典型的给一个委托添加一个方法调用代码如下:
    private void ctrl_Click (object sender,EventArgs e)
    txt.Click += new MyDelegate(ctrl_Click);
    private ctrl_Click(object sender,EventArgs e)
    {
     Message.Show(...);
    }
    哪怕只有这么一条语句也必须得按上面的形式给事件的调用列表添加方法,还得创建一个委托的实例在C#2.0中引入了匿名方法,大大简化了上述操作
    可以改写为
    txt.Click += delegate {Message.Show();}
    或是这样:
    txt.Click += ctrl_Click也是允许的.C#编译器对上述的定义自动隐式转化,只要匿名方法和委托的定义兼容.
    符合下列条件可以兼容
    1.参数兼容
    如果匿名方法没有参数,委托中没有out参数
    如果匿名方法和委托的参数在数量,类型,顺序上都一致
    2.返回值兼容
    如果委托没有返回值,匿名方法中也没有返回值或匿名方法中只有return不带返回值
    如果两者都有返回值,并且匿名方法的返回值可以隐式转化为委托定义的类型符合参数和返回值兼容的就可以使用匿名方法
    匿名方法的捕获变量(capture variable)如果局部变量或参数的作用范围内包含匿名方法声明,则该局部变量或参数称为该匿名方法的外部变量或捕获变量public void method1(bool enabled)
    {
     string b;
     this.txt.Click += delegate 
     { 
      this.txt.enabled = enabled;
      this.txt.Text = b;
     }
    }对于这个匿名方法来说:参数enabled和变量a是它的捕获变量或叫外部变量.
    捕获变量的生命周期直到此匿名方法的资源被回收而结束
      

  2.   

    看看这里吧,说的很清楚
    http://book.csdn.net/bookfiles/140/1001405886.shtml