12

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

我发现自己在一个项目中需要学习一些新的(对我来说)技术,包括 LINQ(为了这个项目的目的到 OBJECTS 和到 XML)等等。到目前为止,我所读到的所有内容都表明,要使用 LINQ,我需要完全理解以下内容(委托、匿名方法和 Lambda 表达式)。

好的,现在乐趣来了。过去我曾在使用 .NET 事件模型时使用过代表,但大部分细节对我来说是隐藏的(感谢 Microsoft!)。我知道,在基本层面上,委托实例是指向方法的指针(我知道,这太简单了)。

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

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

请原谅我的任何描述与此处不符,这是我理解这些主题的基本水平。

所以,挑战:

  1. 如果我对这些项目的理解甚至接近,谁能告诉我至少在基本层面上?我不是在寻找复杂的深奥细节,只是基础知识(目前)。

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

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

提前感谢大家的耐心、时间和专业知识。

4

3 回答 3

6

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

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

2) 你不需要对 lambdas 有深入的了解。

箭头语法( => )对我来说是最大的障碍。箭头将签名和 lambda 表达式的主体分开。

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

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

3)当然,这是我的一些答案,显示了 linq 方法调用 - 有些带有 xml。

于 2009-01-13T16:06:50.773 回答
5

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

2/3)我会读一点,直到您对委托、匿名方法和 lambda 表达式感到满意为止。我用一章专门介绍 C# 2.0 和 C# 3.0 在 C# 中与委托相关的更改,当然其他书籍也会详细介绍。我也有一篇文章,如果有帮助的话。

至于示例 - 代表用于许多不同的目的。它们都是看待相同功能的不同方式,但感觉却大不相同:

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

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

编辑:我应该指出,您目前只使用 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 章有几个不同的委托使用示例。

于 2009-01-13T16:09:33.827 回答
1

读这个...

http://linqinaction.net/

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

于 2009-01-13T16:10:14.247 回答