jbt*_*ule 10
现在nuget上有一个模块,它使用dlr来实现动态运算符.FSharp.Interop.Dynamic
与许多片段相比,它有几个优点.
添加!?前缀运算符,用于处理直接调用动态对象和在运行时没有类型的函数.
正如eriawan所提到的,?运算符的行为有点像dynamicC#中的类型.关于调用SQL的文章不依赖于DLR中的任何内容,因为您可以提供自己的?运算符实现,并且编译器直接使用它.
我还写了一个简短的例子,说明如何使用?运算符来调用使用DLR的成员,这可以在F#片段中找到,并且Matthew Podwysocki有一个更复杂的版本.另一个片段展示了如何使用它来使用Reflection调用标准.NET类型.
也可以看看:
是的.您可以?在F#中使用operator,它将在.NET 4.0中的C#和VB.NET中以相同的方式执行动态类型.首先,您可以从Tomas Petricek的博客中阅读此示例Dynamic SQLDataReader:
http://tomasp.net/blog/dynamic-sql.aspx
以下是他的文章的引用:
在本文中,我们将了解如何使用动态运算符来更好地使用F#中的ADO.NET.动态运算符(实际上有两个)是在F#中支持动态调用的简单方法.我们可以使用它来编写看起来几乎像普通方法调用或属性访问的代码,但是在运行时动态解析(使用方法或属性的名称).以下示例显示了我们在本文末尾可以编写的内容:
Run Code Online (Sandbox Code Playgroud)// 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存储过程,那么您肯定会欣赏此代码段的优雅.现在让我们来看一个更大的例子,以及一些使这成为可能的巧妙技巧......
有关更多信息,您可以阅读他的文章的其余部分.F#中的快乐动态编码:)