C#3.0 lambda表达式

本文介绍了C#中Lambda表达式的使用方法,包括其语法格式、与匿名方法的区别及如何转换为委托类型。通过示例对比了使用Lambda表达式与传统方法在查找字符串中的效率差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识lambda表达式

//使用C#2.0中的匿名方法查找“内部包含abc子串的所有字符串”

list.FindAll(delegate(string s) { return s.IndexOf("abc") >= 0; });

//使用C#3.0中的lambda表达式查找“内部包含abc子串的所有字符串”

list.FindAll(s => s.IndexOf("abc") >= 0);

说明:

整个lambda是一个值,这个值是委托类型(或者说可以转换为委托类型的对象)

lambda表达式格式

lambda表达式格式为:(参数列表)=>表达式或者语句块。

可以有多个参数、一个参数、或者无参数。参数类型可以隐式或者显式。例如:

lambda表达式格式要点

lambda表达式的参数类型可以忽略,因为可以根据使用的上下文进行推断。

lambda表达式的主体(body)可以是表达式,也可以是语句块。

lambda表达式传入的实参将参与类型推断,以及方法重载辨析。

lambda表达式和表达式体可以被转换为表达式树。

lambda表达式与委托类型

lambda表达式L可以被转换成委托类型D,需要满足以下条件:

L和D拥有相同的参数个数。

L的参数类型要与D的参数类型相同,注意隐式类型要参数与类型辨析。

D的返回类型与L相同,无论L是表达式还是语句。

举例:

已经有这样的定义:

 public class MyClass
    {
        public static void Process(MyDelegate d);
    }
    delegate int MyDelegate(int n);

调用:MyClass.Process(x=>x*10);   它所表示的:

 public static int X(int n)
        {
            return n * 10;
        }

MyDelegate md = new MyDelegate(X);
            MyClass.Process(md);

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值