C#中的Lambda表达式
·
C#中的的Lambda表达式本质上与匿名函数的使用别无二差,只是声明方式上不再使用delegate关键字。
using System;
using System.Collections.Generic;
namespace lesson14
{
class Test
{
public event Action action;
public Test()
{
int value = 10;
//内部函数引用了外层函数的变量,从而改变了构造函数的生命周期,形成了一个闭包
//内层函数可以引用外层函数的变量,即使外层函数的声明周期已经终止
action = () =>
{
Console.WriteLine(value);
};
//i的改变并不会与匿名函数同步,而是仅表现i的最终值
//故而,此处对于i的打印相当于在循环全部结束后为10的时候进行的
//即内层函数对于外层变量的引用,使用的时在外层函数范围内该变量的最终值
for (int i = 0; i < 10; i++)
{
action += () =>
{
Console.WriteLine(i);
};
}
}
public void DoSomthing()
{
action();
}
}
class Program
{
static void Main(string[] args)
{
//无参无返回值的Lambda表达式
Action a = () =>
{
Console.WriteLine("无参无返回值的Lambda表达式");
};
a();
//有参数的Lambda表达式
Action<int> a1 = (int value) =>
{
Console.Write(value);
};
a1(3);
//参数类型可以省略
Action<int> a2 = (value) =>
{
Console.WriteLine(value);
};
a2(200);
//有返回值的Lambda表达式
Func<string, int> a4 = (value) =>
{
Console.WriteLine(value);
return 1;
};
Console.WriteLine(a4("123123"));
Test t = new Test();
t.DoSomthing();
}
}
}
更多推荐


所有评论(0)