当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《代表和Lambdas和LINQ,哦,我的!》经验,为你挑选了2个好方法。

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

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

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

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

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

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

所以,挑战:

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

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

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

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



1> Amy B..:

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

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

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

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

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

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

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

列表拆分

简单的Xml存在搜索

Xml投影 - 形状变化



2> Jon Skeet..:

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

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

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

提供在启动新线程时调用的代码

对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章有几个不同的委托使用示例.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有