C#中的Lambda表达式
2014-03-29 10:56
316 查看
在看C#中的Lambda表达式之前,先来看一个概念:匿名方法。学过Java的亲们,可能对这个概念比较了解。Java JDK8中也引入了Lambda表达式。
下面看看C#中的匿名函数。下面是一个实例:
运行结果如下:
从C#3.0开始,可以使用Lambda表达式替代匿名方法。
下面我们看看上面的例子,改写成Lambda表达式版本的是什么模样:
运行结果与上面的完全一样。
上面的实例是一个参数的Lambda表达式,看看如下形式的Lambda表达式:
towParams = (x, y) => x * y; //两个参数,返回值为x与y的成绩,只有一行代码,return可以省略。
noParam = () => {Console.WriteLine()}; //没有参数的Lambda表达式
下面来看一些本质的东西:
对于如下的代码:
int intValue = 7;
Func<int, int> add = num => num + intValue;
Console.WriteLine(add(3));
我们来看看编译器究竟帮我们做了什么:
对于Lambda表达式num => num + intValue,编译器会创建一个匿名类,它有一个构造函数来传递外部变量。该构造函数取决于外部传递进来的变量个数。
使用Lambda表达式并调用该方法,会创建匿名类的一个实例,并传递调用该方法时变量的值。
下面看看C#中的匿名函数。下面是一个实例:
namespace ConsoleApplication { class AnonymousMethod { public static void Main() { String name = "周杰伦"; /* * Func<String, String>委托接受一个字符串参数,返回一个字符串。sayHello是这种委托类型的变量。 * 可以看到,这里不是把方法名赋予这个变量,而是使用一段简单的代码: * 它前面是关键字delegate,后面是一个字符串参数,然后是方法的实现,最后以分号结束。 */ Func<String, String> sayHello = delegate(String param) { String greeting = "你好," + param + "!我们喜欢你的歌!"; return greeting; }; Console.WriteLine(sayHello(name)); } } }
运行结果如下:
从C#3.0开始,可以使用Lambda表达式替代匿名方法。
下面我们看看上面的例子,改写成Lambda表达式版本的是什么模样:
namespace ConsoleApplication { class LambdaExpression { public static void Main() { String name = "周杰伦"; /* * Func<String, String>委托接受一个字符串参数,返回一个字符串。sayHello是这种委托类型的变量。 * Lambda运算符“=>”的左边列出了需要的参数。 * Lambda运算符的右边定义了赋予Lambda变量的方法的实现代码。 * 怎么样?是不是很简单! */ Func<String, String> sayHello = param => { String greeting = "你好," + param + "!我们喜欢你的歌!"; return greeting; }; Console.WriteLine(sayHello(name)); } } }
运行结果与上面的完全一样。
上面的实例是一个参数的Lambda表达式,看看如下形式的Lambda表达式:
towParams = (x, y) => x * y; //两个参数,返回值为x与y的成绩,只有一行代码,return可以省略。
noParam = () => {Console.WriteLine()}; //没有参数的Lambda表达式
下面来看一些本质的东西:
对于如下的代码:
int intValue = 7;
Func<int, int> add = num => num + intValue;
Console.WriteLine(add(3));
我们来看看编译器究竟帮我们做了什么:
对于Lambda表达式num => num + intValue,编译器会创建一个匿名类,它有一个构造函数来传递外部变量。该构造函数取决于外部传递进来的变量个数。
public class AnonymousClass { private int intVlaue; public AnonymousClass(int intValue) { this.intVlaue = intVlaue; } public int AnonymousMethod(int num) { return num + intVlaue; } }
使用Lambda表达式并调用该方法,会创建匿名类的一个实例,并传递调用该方法时变量的值。
相关文章推荐
- CSharp_PivotGridControl和ChartControl简单实现<增强版>;
- C# 操作Excel基础篇(读取Excel、写入Excel)
- c# 中内部类的简单介绍
- C#多播委托(Multicast Delegate)
- c# 的传递参数值传递与传递引用的区别,ref与out区别
- C#------数据类型
- C#------数据类型
- .net farmework(c#)安全代码 非安全代码 托管资源 非托管资源
- C# 关于类成员的一些赘述
- C# 关于namespace的细节
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
- c#—devexpress chartcontrol 鼠标点击chart上的点事件,鼠标移动显示值
- C# 关于泛型
- C#操作缓存--CacheHelper缓存帮助类
- 双三次差值算法。C#并行处理版。
- C#多态问题
- [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet
- C# 实现将 PDF 转文本的功能
- C#中的泛型list
- C#_在VS2010下进行单元测试