码迷,mamicode.com
首页 > Windows程序 > 详细

C# Labmda表达式

时间:2015-04-16 10:21:31      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:c#   labmda   lambda表达式   

本篇我们来讨论C#中的Lambda表达式。本篇会使用上一篇文章:C#委托中的Person类,代码如下

public delegate void MyDelegate();

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public void ZhuangBi(MyDelegate findTopic, MyDelegate findPerson)
    {
        //首先,找到话题
        findTopic();
        //然后,找到一个能够聊天的人
        findPerson();
        Console.WriteLine("I am newbility");
    }
}

class Program
{
     static void Main(string[] args)
     {
        Person p = new Person();
        MyDelegate delegate_FindTopic = FindTopic;
        MyDelegate delegate_FindPersonToTalk = FindPersonToTalk;
        p.ZhuangBi(delegate_FindTopic, delegate_FindPersonToTalk);
     }

    static void FindTopic()
    {
        Console.WriteLine("MongoDB is not too bad");
    }

    static void FindPersonToTalk()
    {
        Console.WriteLine("find a geek");
    }

}

我们现在思考这样一个问题啊,我这个人有强迫症,我觉得我在Program这个类中定义的两个方法FindTopic和FindPersonToTalk的功能都这么简单,能不能在调用Person.ZhuangBi这个方法时更加简化呢?
我们可以使用Lambda表达式。Lambda表达式本质上是一个匿名方法,顾名思义,匿名方法也是方法,只不过是没有方法名。可是,没有方法名怎么调用它呢?我们可以使用委托来调用它。
让我们使用Lambda表达式来改造一下我们的Program类

class Program
{
    static void Main(string[] args)
    {
        Person p = new Person();
        MyDelegate delegate_FindTopic = () => { Console.WriteLine("MongoDB is not too bad"); };
        MyDelegate delegate_FindPersonToTalk = () => Console.WriteLine("find a geek");
        p.ZhuangBi(delegate_FindTopic, delegate_FindPersonToTalk);
    }
}

这样子写的好处是,我就不需要再为这两个简单的功能专门写两个方法了。如果你把代码复制到本地编译运行一下,结果是可以正常输出的。如果现在看不懂的话没关系,下面我们会介绍Lambda表达式的语法,看完语法后再来看这段代码,你也许就明白了。

下面我们来讲一些关于Lambda表达式的语法问题
Lambda表达式最基本的形式是

(input parameters) => expression
(input parameters) => {}

我们上面说Lambda表达式本质上是一个方法,所以它就包含参数列表和返回值。上面的两种形式,第一种的箭头后面是一个表达式,第二种的后面是一个代码段。如果有返回值的话,第一种的表达式就是返回值,而第二种的返回值会在语句段中使用return关键字指定,跟一般的方法一样。例如,我们定义两个个Lambda表达式,都实现两个整数相加

Func<int, int, int> myFunc1 = (int a, int b) => a + b;
Func<int, int, int> myFunc2 = (int a, int b) => { return a + b; };

Func< int, int, int>是系统定义的泛型委托,第一个泛型参数int是返回值,后面两个泛型参数int是参数列表。
仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔。下面我们定义一个Lambda表达式,求一个整数的平方,下面这几种写法都可以

Func<int, int> myFunc3 = x => x * x ;
Func<int, int> myFunc4 = (x) => { return x * x; };
Func<int, int> myFunc5 = (int x) => { return x * x; };
Func<int, int> myFunc6 = x => { return x * x; };

参数是int型的x,返回值是 x*x。由于我们的委托类型Func< int, int>已经指定了方法的参数类型和返回值类型,所以,在Lambda表达式中,参数的类型可以省略。

Lambda表达式一般都跟委托一起使用。在Linq中也比较常用。

C# Labmda表达式

标签:c#   labmda   lambda表达式   

原文地址:http://blog.csdn.net/daguanjia11/article/details/45071031

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!