代表和Lambdas和LINQ,哦,我的!

作为一个相当初级的开发人员,我遇到的问题突出了我缺乏经验和我所知的漏洞。 如果这里的序言太长,请原谅。

我发现自己处于一个涉及我需要学习一些新的(对我而来)技术的项目,包括LINQ(对于这个项目来说是OBJECTS和XML)等等。 我读到的所有内容都表明,要使用LINQ,我需要完全理解以下内容(代理,匿名方法和Lambda表达式)。

好的,所以现在很有趣。 我曾经使用过.NET事件模型,因此我已经消费了代表,但是大多数细节都是隐藏的(感谢Microsoft!)。 我理解,在基本层面上,委托实例是指向方法的指针(我知道这种过度简化)。

我知道匿名方法本质上是一种内联的未命名方法,通常(如果不是唯一的话)创建为委托的目标。

我也理解lambdas以不同的方式用于简化语法,并可用于将简单的匿名方法指向委托。

请原谅我,如果我的任何描述都在这里,那么这就是我理解这些主题的基本层面。

所以,挑战:

  1. 如果我对这些项目的了解甚至更接近,至少在基本层面上有人能告诉我吗? 我不是在寻找复杂的深奥细节,只是基础(现在)。

  2. 在将LINQ应用于项目中以达到合理的效果之前,我需要在多大程度上真正理解这些概念? 我想完全理解它,并愿意花时间。 在我需要完成一些工作之前,我可能没有时间完全理解所有这些东西。

  3. 任何人都可以向我指出一些解释这些主题的好文章,并将它们应用到“真实世界”的例子中,这样我就可以了解主题的基础知识和应用它们吗? 我的意思是现实世界,我是如何在“客户和发票”的背景下使用它而不是抽象的“矢量和形状”或“动物和奶牛”。 出于演示目的,这种情况可能有点人为,但希望不是严格的学术性的。 我在网上和书中找到了一些例子,但似乎很少有“简单英语”的解释。

提前感谢您的耐心,时间和专业知识。

1)这些描述对我来说听起来非常准确。 有时,匿名方法和lambda表达式需要创建一个新类型来放置委托的目标,因此它们可以充当闭包 。

2/3)我会读到一些内容,直到你对委托,匿名方法和lambda表达式感到满意为止。 我在C#2.0深度介绍了C#2.0和C#3.0中与代理相关的更改,但当然其他书籍也会详细介绍。 我也有一篇文章 ,如果有帮助的话。

至于示例 – 委托用于许多不同的目的。 它们是查看相同function的不同方式,但它们可以感觉非常不同:

  • 提供在启动新线程时调用的代码
  • 对UI事件做出反应
  • 为LINQ查询提供filter,选择,排序等
  • 为异步操作完成时提供回调

如果你有任何特定的情况,你想要一个例子,那将更容易回答。

编辑:我应该指出,你现在只使用LINQ to Objects和LINQ to XML这是一个好消息,因为这意味着你还不需要理解表达式树。 (它们很酷,但是一步一步……)LINQ to XML实际上只是一个与LINQ很好地结合使用的XML API – 从我记忆中,你唯一能够使用LINQ to XML的委托就是你实际上正在调用LINQ to Objects。 (诚​​然,这是非常好的做法 – 但这意味着你可以重复使用你已经学过的东西。)

由于您已经在深度中获得了C#,因此第10章和第11章提供了一些在LINQ中使用 lambda表达式(以及转换为lambda表达式的查询表达式)的示例。 第5章有几个不同的委托使用示例。

我在哪里可以找到C#3的深度指南?

1)到目前为止你的知识似乎没问题。 Lambda表达式转换为匿名方法或System.Linq.Expressions.Expression,具体取决于上下文。 由于您没有使用数据库技术,因此您不需要理解表达式(所有lambda都是匿名方法)。 您没有列出扩展方法,但这些方法非常重要(并且易于理解)。 确保您了解如何将扩展方法应用于接口 – 因为linq中的所有function都来自System.Linq.Enumerable – 针对IEnumerable(Of T)的扩展方法的集合。

2)你不需要对lambdas有深刻的理解。

箭头语法(=>)对我来说是最大的障碍。 箭头分隔lambda表达式的签名和正文。

永远记住: 在枚举之前不会执行Linq方法。

注意在lambda中使用循环变量 。 这是延迟执行的副作用,特别难以追踪。

3)当然,这里有一些我的答案显示linq方法调用 – 一些用xml。

  • 列表拆分
  • 简单的Xml存在搜索
  • Xml投影 – 形状变化

读这个…

http://linqinaction.net/

..你问的所有问题都将得到解答!