簡體   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