繁体   English   中英

F#动态object接入

[英]F# dynamic object access

有没有办法访问 F# 中类似于 C# 动态的 DLR object(例如 DynamicObject 子类实例)成员(属性和方法)?

现在 nuget 上有一个模块,它使用 dlr 来实现动态运算符。 FSharp.Interop.Dynamic

与那里的许多片段相比,它有几个优点。

  • 性能它使用Dynamitey进行 dlr 调用,实现缓存并且是一个 PCL 库
  • 处理返回 void 的方法,如果您不丢弃这些结果,您将获得绑定异常。
  • dlr 自动处理通过 function 调用委托返回的情况,这也将允许您对 FSharpFunc 执行相同操作
  • 添加一个? 前缀运算符来处理在运行时直接调用您没有类型的动态对象和函数。

    它是开源的,Apache 许可证,您可以查看实现和基本单元测试示例案例

正如 eriawan 提到的, ? 运算符的行为有点像 C# 中的dynamic类型。 关于调用 SQL 的文章不依赖于 DLR 的任何内容,因为您可以提供自己的? 运算符和编译器直接使用它。

我还写了一个简短的例子来说明如何使用? 运营商使用 DLR 呼叫成员,可在 F# 片段上找到,Matthew Podwysocki 提供了更复杂的版本 另一个片段显示了如何使用它来使用 Reflection 调用标准 .NET 类型

也可以看看:

是的。 你可以用? F# 中的运算符,它将在 C# 和 VB.NET 中的 C# 和 Z303CB0EF9EDB9082D64BBE0.55082D64BB9 中的 VB.NET 中执行相同的方式。 首先,您可以从 Tomas Petricek 的博客中阅读此示例 Dynamic SQLDataReader:

http://tomasp.net/blog/dynamic-sql.aspx

以下是他文章中的一段话:

在本文中,我们将了解如何使用动态运算符来显着改善使用 F# 中的 ADO.NET 的体验。 动态运算符(实际上有两个)是 F# 中支持动态调用的一种简单方法。 我们可以使用它来编写看起来几乎像普通方法调用或属性访问但在运行时动态解析的代码(使用方法或属性的名称)。 下面的例子展示了我们在本文结尾可以写的内容:

 // Call 'GetProducts' procedure with 'CategoryID' set to 1 use conn = new DynamicSqlConnection(connectionString) use cmd = conn?GetProducts cmd?CategoryID <- 1 conn.Open() // Read all products and print their names use reader = cmd.ExecuteReader() while reader.Read() do printfn "Product: %s" reader?ProductName

如果您曾经尝试使用 SqlCommand 直接调用 SQL 存储过程,那么您一定会欣赏到这段代码的优雅。 现在让我们看一个更大的例子和一些使这成为可能的巧妙技巧......

有关更多信息,您可以阅读他的文章中的 rest。 F#中的快乐动态编码:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM