【问题标题】:LINQ in win32 DELPHIwin32 DELPHI中的LINQ
【发布时间】:2009-01-03 23:55:18
【问题描述】:

是否可以在win32 DELPHI应用程序中使用LINQ

【问题讨论】:

    标签: linq delphi winapi


    【解决方案1】:

    Delphi 2009 支持泛型类助手匿名方法,但不支持lambda扩展方法类型推断。 Lambda 表达式可能会出现在 Delphi 的未来版本中,但它们还没有出现在官方路线图上(希望很快就会出现一个新的)。此外,Delphi for Win32 无法访问所有 LINQ 库。

    所以简短的回答是否定的,你不能在 Win32 Delphi 中执行 LINQ。您可以做一些类似的事情,从技术上讲,您甚至可以通过 COM 访问 LINQ(就像您可以使用任何 .NET 类一样),但是如果没有酷炫的 LINQ 语法,它会有点失败。

    LINQ 确实是一种 .NET 技术。虽然 Delphi 很可能会开发使 LINQ 成为可能的语言功能,但底层 .NET 库仅用于 .NET 开发。

    我建议使用RemObject Data Abstract 或类似的。

    【讨论】:

    • 嗯...扩展方法和类助手不是完全相同的两个名称吗?唯一的区别是其中一个在 Delphi 中使用,另一个在 C# 中使用,或者我忽略了一些关键的功能?
    • 类助手只适用于一个类。扩展方法更广泛一些。它们非常相似,您可以使用 Class Helpers 来实现,但需要更多代码。
    【解决方案2】:

    是的和不是的。LINQ 真的可以被认为是两个不同的项目。

    首先是类似 SQL 的查询语法。它允许您在 C# 中编写以下内容。

    var query = from it in "foobar" select Char.ToUpper(it);
    

    要让 delphi 使用这个版本的 LINQ,它需要添加显式语法支持。 AFAIK 这不存在。

    但在底层,所有 LINQ 查询都被转换为一组查询表达式。这些通常涉及大量使用 lambda 表达式和闭包。上面的代码等价于下面的非SQL语法版本。

    var query = "foobar".Select(x => Char.ToUpper(x));
    

    我不知道 Delphi 对 lambda 或委托的支持程度,但应该可以从 Delphi 以这种方法访问 LINQ。

    【讨论】:

    • - 你有一个小错误,你需要将“it”替换为“x”。 Delphi Win32 几乎没有使第二个示例工作的所有功能。没有VAR。 string 和 char 不是对象,并且您没有短语法 lamda 表达式。所以如果你能做到,那就丑多了。
    【解决方案3】:

    我不知道它出现在哪个版本的 Delphi 中,但在 XE 中我们有“对象函数”,可以作为闭包或近似相等的 lambda 表达式。

    因此,从今天(2011 年 6 月 26 日)开始,在 Delphi(第二种形式)中几乎可以使用类似 LINQ 的表达式。

    【讨论】:

    • “对象函数”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多