认知Lambda表达式

Lambda表达式是C#3.x中的新增的重要功能,它能够帮助我们写出超级精炼的代码来。也许有些网友对此功能感到困惑,结合自己的使用和试验现将此功能做下小的总结。

谈到Lambda表达式必须先说说匿名方法(),好多文章都直接提Lambda而不提匿名方法这是不科学的,因为Lambda表达式完全是继承自匿名方法而来,Lambda 表达式是与匿名方法类似的内联表达式,但更加灵活。

匿名方法是C#2.0时的新增功能。匿名方法概括起来就是指:在一个方法内部直接实现和使用另外的方法而无须提前声明方法。一般来讲,匿名方法都是代码比较少且不须重用的那些方法。

例如:

private void button1_Click(object sender, EventArgs e)
{
    List<string> names = new List<string>();
    names.Add("Risen");
    names.Add("Tom");
    names.Add("Amy");
    names.Add("Mark");
    string strResult = names.Find(IsRisen);
    MessageBox.Show(strResult);
}
​
bool IsRisen(string name)
{
    return name.Equals("Risen");
}

以上是最一般的方法调用形式。也可以通过声明和使用匿名方法完成上述操作:

private void button2_Click(object sender, EventArgs e)
{
    List<string> names = new List<string>();
    names.Add("Risen");
    names.Add("Tom");
    names.Add("Amy");
    names.Add("Mark");
    string strResult = names.Find(delegate(string name)
    {
        return name.Equals("Risen");
    });
    MessageBox.Show(strResult);
}

也许有些网友开始并不习惯这样的写法,但是这样做的好处不仅仅是节省下了打击键盘的数量,而是使方法间的调用更加直观,更加方便了代码维护,万一在一个n行的源文件中IsRisen方法与button1_Click事件相隔很远,在它们之间切换可不是什么好滋味。

我们再看一下Lambda表达式的写法:

private void button3_Click(object sender, EventArgs e)
{
    List<string> names = new List<string>();
    names.Add("Risen");
    names.Add("Tom");
    names.Add("Amy");
    names.Add("Mark");
    string strResult = names.Find(name=>name.Equals("Risen"));
    MessageBox.Show(strResult);
}

哈,代码更加简洁明快!注意代码中的这个=>符号,该标记称作 Lambda 运算符。该标记在 Lambda 表达式中用来将左侧的变量与其右侧的 Lambda 体分离。

认知Lambda表达式

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部