gpt4 book ai didi

linq - Linq 是如何工作的(在幕后)?

转载 作者:行者123 更新时间:2023-12-04 00:12:26 24 4
gpt4 key购买 nike

我正在考虑为 Lua 制作类似 Linq 之类的东西,我大致了解 Linq 的工作原理,但想知道是否有一篇好文章,或者是否有人可以解释 C# 如何使 Linq 成为可能

注意:我的意思是在幕后,比如它如何生成代码绑定(bind)等等,而不是最终用户语法。

最佳答案

很难回答这个问题,因为 LINQ 有很多不同的东西。比如坚持C#,就涉及到以下几点:

  • 查询表达式被“预处理”成“没有查询表达式的 C#”,然后正常编译。规范的查询表达式部分非常短——它基本上是一种机械翻译,除了“order by 被翻译成 OrderBy/ThenBy/etc”之外,它不假设查询的真正含义。
  • 委托(delegate)用于将具有特定签名的任意操作表示为可执行代码。
  • 表达式树用于表示相同的事物,但作为数据(可以检查并转换为不同的形式,例如 SQL)
  • Lambda 表达式用于将源代码转换为委托(delegate)或表达式树。
  • 大多数 LINQ 提供程序使用扩展方法将静态方法调用链接在一起。这允许一个简单的接口(interface)(例如 IEnumerable<T> )有效地获得更多的权力。
  • 匿名类型用于预测 - 您有一些不同的数据集合,并且您想要该数据的每个方面的位,匿名类型允许您将它们收集在一起。
  • 隐式类型的局部变量(var)主要在使用匿名类型时使用,以维护一种静态类型的语言,在这种语言中,您可能无法显式地“说出”类型的名称。
  • 迭代器 block 通常用于实现进程内查询,例如用于 LINQ 到对象。
  • 类型推断用于使整个事情变得更加顺畅 - LINQ 中有很多通用方法,如果没有类型推断,那将非常痛苦。
  • 代码生成用于将模型(例如 DBML)转换为代码
  • 部分类型用于为生成的代码提供可扩展性
  • 属性用于向 LINQ 提供程序提供元数据

  • 显然,其中很多不仅被 LINQ 使用,而且不同的 LINQ 技术将依赖于它们。

    如果您可以提供更多关于您感兴趣的方面的指示,我们或许可以提供更多详细信息。

    如果您对有效地实现 LINQ to Objects 感兴趣,您可能会对几周前我在 DDD 的 Reading 上发表的演讲感兴趣 - 基本上是在一个小时内实现尽可能多的 LINQ to Objects。到最后我们还远未完成,但它应该很好地了解您需要做的事情(以及缓冲/流式传输、迭代器 block 、查询表达式翻译等)。视频还没有发布(我还没有上传代码供下载)但是如果你有兴趣,请给我发邮件至 skeet@pobox.com,我会在视频发布时通知你. (我可能也会写博客。)

    关于linq - Linq 是如何工作的(在幕后)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/333242/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com