30 lambda表达式 知识点

//什么是lambda表达式
//可以将lambda表达式 理解为匿名函数的简写
//它除了写法不同外
//使用和匿名函数一模一样
//都是和委托或者事件 配合使用的

//无参无返回值

 Action at = () =>{Console.WriteLine("无参无返回"); };  at.Invoke();

//有参无返回值

 Action<int>st1=(int value) => 
         {
                Console.WriteLine("有参数{0}", value);
          };

//有参无返回值第二种表示方式——省略参数类型写法

Action<int>st1=( value) => 
         {
                Console.WriteLine("有参数{0}", value);
          };

//有参有返回值

 Func<string, int> st3 = (value) =>
            {
                  Console.WriteLine("有参数有返回值{0}", value);
                  return 1;
             };

//闭包
//内层的函数可以引用包含在它外层的函数的变量
//即使外层函数的执行已经终止
//注意
//该变量提供的值并非变量创建时的值,而是在父函数范围内的最终值

 class Test
    {
        Action ac;

        //这里就形成了闭包
        //因为当构造函数执行完毕时,其中申明的临时变量Value的声明被改变了
        public Test()
       {
            int Value = 10;

             ac = () =>
              {
                  Console.WriteLine(Value);
              };

            for (int i = 0; i < 20; i++)
            {
                ac += () =>
                {
                   //此处获取i的值是i的最终值(因为在调用ac方法前,i的最终值为20)
				   //解决方法是在函数内部重新申明一个局部变量来接收i的值
                    Console.WriteLine(i);
				  /*
				   20
				   20
				   20
				   20
				   20
				   20
				   20
				   20
				   20
				   */
                };
            }
        }

        //此处调用
        public void Dosomthing()
        {
            ac.Invoke();
        }
    }
posted @ 2023-01-08 10:22  libaisheng9723  阅读(33)  评论(0)    收藏  举报