• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
微软(北京).Net俱乐部-H2O、winnerzone
一个战士一旦穿上军装拿起武器就已经做好了战斗的准备,他将被派往无数战火纷飞的战场,每一次都会有生命的危险。
但是一旦他活下来了,那些都将成为光荣的历史被讲述和回忆。对于一个新兵,危险和机遇并存,机遇大于危险和压力。
博客园    首页    新随笔    联系   管理    订阅  订阅

【翻译】Lambda表达式学习

在这篇文章中,Brian讨论了Lambda表达式 在.NET应用程序中的Lambda的用法和应用。提供了一个简短的介绍,在源代码和相关说明帮助下他测试了概念

摘要

在这篇文章中,Brian讨论了Lambda表达式 在.NET应用程序中的Lambda的用法和应用。
提供了一个简短的介绍,在源代码和相关说明帮助下他测试了概念

介绍

Lambda表达式减少了重复数据的工作量。所有可列举数据是通过使用一个SQL-like
查询语法(一种看起来像SQL的查询,但不同于它)的LINQ来查询的。
LINQ 内置机制将循环枚举数据,并且使用一定的条件构成条件语句过滤数据。LINQ查询效率非常高。
Lambda表达式也是以类似的方式工作。一些现有的扩展方法内嵌Lamdba表达式来执行某些操作,
并且使重复操作变得更容易。我们将很快看到。Lambda表达式能够不需要扩展方法,但是这是现在通常的用法。

.NET Framework Lambda's

在.NET Framework 使用Lambda表达式可以定义各种各样扩展方法。在System.Core程序集,
System.Linq命名空间提供了两个静态类包含各种各样枚举和查询的定义源码。
例如在一些Where方法中定义了那些表达式。像这样的方法定义:

Listing 1

Where<TSource>(IEnumerable<TSource>, Func<TSource, bool>);

请注意第二个参数;Func (or function in VB.NET)定义了一个Lambda表达式。泛型参数是个key。
在Lambda表达式中第一个参数是IEnumerable接口类型,并且第二个参数是必须被方法返回的值。
我马上会开始一个例子,但意识到返回值的类型有许多例如一个string,double,业务实体,等。
那么我们使用Lambda表达式?在C#中Lambda表达式定义如下:

Listing 2

var items = list.Where(I => I.FirstName == "Fred");

让我们继续这里。首先,"=>"代码标记一个Lambda表达式。"I" 参数是如上面的Func所声明的
类型<TSource> 别名或对象名。第一个参数是对象被循环,或者在容器中许多项的项类型。
例如,如果你有一个List<MyObject>,"I" 是一个MyObject类型的引用。因此,在我们的表达式上,
仅仅获取对象的FirstName是"Fred"的结果(必须是一个boolean)。
内容中向右的 "=>" 是定义方法返回true和false的条件检查。那么它如何使用?
我在我的应用中创建了另一个实例。他工作非常类似与一个代理,但是它介于代理和匿名方法之间,
因为实际定义是动态的。

Listing 3

public static IEnumerable < ListItem > FindItemsWith(this ListControl control,   Func < ListItem, bool > result)
{   
    List 
< ListItem > foundItems = new List<ListItem >();   
    
foreach (ListItem item in control.Items)   
    
{     
        
if (result(item))       
            foundItems.Add(item);   
    }
   
    
return foundItems;
}

注意使用Lambda表达式标记需要声明Func<ListItem, bool>. ListItem 对象被比较对象,
并且方法返回一个bool值。在循环之后,列表容器中每个项被循环。
Lambda表达式获取一个ListItem对象的引用,并且返回 bool 表达式;如果结果返回为true,
列表添加,并集合进行回调。

结论

想你所看到的,使用Lambda表达式真的很简单,并且嵌入到你的应用程序中。
他真正的向你的应用程序中添加了大量的功能。Lambda表达式通常是通过静态方法公开,
但是他们在其他情况下也可以很好的使用。现在.NET Framework 中最常用的用法是扩展方法,但现在则不需要了。

原文地址

翻译的不是很好,请大家指出来。谢谢。


WINNERZONE
posted @ 2008-03-17 14:03  H2O、winnerzone  阅读(3448)  评论(5)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3