前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#中的Lambda表达式

C#中的Lambda表达式

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-25 15:15:44
7620
发布2019-01-25 15:15:44
举报

在看C#中的Lambda表达式之前,先来看一个概念:匿名方法。学过Java的亲们,可能对这个概念比较了解。Java JDK8中也引入了Lambda表达式。

下面看看C#中的匿名函数。下面是一个实例:

代码语言:javascript
复制
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表达式版本的是什么模样:

代码语言:javascript
复制
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,编译器会创建一个匿名类,它有一个构造函数来传递外部变量。该构造函数取决于外部传递进来的变量个数。

代码语言:javascript
复制
public class AnonymousClass
{
	private int intVlaue;
	public AnonymousClass(int intValue)
	{
		this.intVlaue = intVlaue;
	}
	public int AnonymousMethod(int num)
	{
		return num + intVlaue;
	}
}

使用Lambda表达式并调用该方法,会创建匿名类的一个实例,并传递调用该方法时变量的值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年03月29日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档