c#匿名方法用途_.NET(C#)中[匿名方法]的用处多(妙用)

在 2.0 之前的 C# 版本中,声明委托的唯一方法是使用命名方法。C# 2.0 引入了匿名方法.通过使用匿名方法,由于您不必创建单独的方法,因此减少了实例化委托所需的编码系统开销。有时匿名方法可以完成命名方法费好大的劲才能完成的功能。不过请注意匿名委托不能显式地有返回值,但是如果委托的签名有返回值的话,只要按照委托实际的签名在代码块中返回值就可以了。

匿名方法的生命周期由于是局部范围内的这个缺点同时又是它的一个优点,可以方便地访问局部变量,而如果使用命名方法有时则会显得很麻烦。

现在举例如下说明:

问题:要求返回在Windows Form窗体中所有不同类型控件的类型名称的集合

思路:在Form类中有一个Controls集合,只要遍历Controls集合,得到把每个控件(Control),通过Control.GetType().ToString()就可以得到类型名称,可以把这个类型名称放在一个List里面,每次加新控件前,查找一下这个控件类型名称集合里面是否已经存在,如果存在就不加入,如果不存在就加入.

解决:

声明List listControlType = new List();//存储控件类型名称的List变量

foreach(Control control in Controls)

{

string tmp = listControlType.Find(

delegate(string s){

if(s == control.GetType().ToString())

return true;

else

return false;

}

);

if(tmp == default(string))

{

listControlType.Add(c.GetType().ToString());

}

}

试想如果用命名方法来实现的话会很麻烦的.因为涉及到局部变量

.注意上面的List.Find()方法中的委托原型是这样的:

public delegate bool Predicate(T obj)

在我上面的匿名委托中并没有显式地声明返回类型(编译器是不允许的,无法通过编译),但是要要保证匿名块中每条路径都返回 bool.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值