C#——匿名方法和Lambda表达式

有一次看见别人的代码里=>以及花里胡哨的省略写法感觉好炫酷,就去整理了一下匿名方法和Lambda表达式的写法。

匿名函数的一些写法:

1.无返回值类型
Action<string>  tellName = delegate(string name){
	Debug.log("My Name is "+name);
};
2.委托为方法参数时,省略构造委托实例
List<int> listArray = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
listArray.ForEach (
	delegate(int i) { Console.WriteLine(i.ToString()); } 
);

3.委托有返回值的时候

Func<int, int, int> func = delegate (int a, int b) { return a - b; };
Predicate<Product> func = delegate (Product obj) { return obj.IsGood; }; 
Predicate<>是返回bool类型的C#内置委托;
4.事件绑定时
this.OnClick+= delegate(int index){ Debug.Log("Click Index is "+index );};

Lambda表达式

lambda表达式自身并非委托类型,但可以通过多种隐示或显示方法转化为委托实例,是匿名方法的进一步演化和简化;

1.无返回值类型
Action<string>  tellName = (string name)=>{
	Debug.log("My Name is "+name);
};
2.委托为方法参数时
List<int> listArray = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
listArray.ForEach (
	i => Console.WriteLine(i.ToString())
);
3.委托有返回值的时候
Func<int, int, string> func = (int a, int b)=>(a-b).ToString();    //操作只有1行省略{},省略return
Func<string> func= ()=> "Hello";        //无参数直接用()

Func<int ,int ,string> func = (a,b)=> (a-b).ToString();   //让编译器进行类型推断,无需显示指定参数类型
Func<int, string> func = i => i.ToString() ;   //只要一个参数,省略(),直接写i
Func<int ,int> func = (i)=>{     //如果操作超过1行,就需要加{},有返回值写return
	i++;
	return i;
};

如果委托需要的参数为ref/out,则需要显示指明ref/out关键字以及参数类型;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值