有沒有辦法在C#中運行時檢查對象是否爲F#記錄類型,而無需引用FSharp.Core庫?在運行時從C#中檢測F#記錄類型
回答
記錄類型在編譯時被標記爲[<CompilationMapping(SourceConstructFlags.RecordType)>]
屬性。這是FSharpType.IsRecord
尋找的內容,可以看到執行here。歧視的工會以類似的方式得到標記。
可以在不明確引用任何FSharp.Core
類型的情況下重新實現該邏輯,也就是說,您可以按名稱查找屬性,並擁有您自己的SourceConstructFlags
enum副本以查找匹配的屬性數據。
我基本上得出這個結論。我或多或少想知道這是否已經被某人完成了。謝謝! –
考慮到在不引用FSharp.Core的情況下使用F#庫是多麼罕見,我會假設人們只使用'FSharpType.IsRecord'。 – Tarmil
@Tarmil:這當然是對的,甚至Newtonsoft.Json(我假設重新實現了一些'FSharp.Core'邏輯以避免依賴)實際上會動態加載'FSharp.Core'以重用反射代碼,請參閱[here ](https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Utilities/FSharpUtils.cs)。 – scrwtp
- 1. F#泛型記錄
- 2. 記錄類型的F#序列化
- 3. printf類型的日誌記錄F#
- 4. F中泛型類型的運行時強制#
- 5. 在運行時檢測ContextDeadlockSwitch
- 6. C++中的運行時類型信息
- 7. F#類型推斷與記錄奇行爲
- 8. EF在運行時從類型
- 9. f#鏈表執行記錄
- 10. 在F#中反映C#類型
- 11. 如何在Dart中執行運行時類型檢查?
- 12. 代碼運行時檢查類型
- 13. VB6運行時類型檢索
- 14. 如何在運行時檢測.NET中是否存在類?
- 15. Doxygen爲C++類運算符進行非實時記錄
- 16. F#運行NUnit測試
- 17. 通過檢測當前'this'對象類型在C++中進行類型轉換
- 18. 從DataHandler檢測MIME類型
- 19. 當我在類中運行方法時,如何記錄消息?
- 20. 簡單類型測試在F#
- 21. C#動態對象運行時類型檢查
- 22. 崩潰檢測,日誌記錄和C++
- 23. 運行時間確定C的類型
- 24. c#.NET運行時對象類型
- 25. F#,Akka.net - Nunit3從TestkKit繼承時未運行測試
- 26. 運行時檢測殭屍
- 27. 在Mono上運行F#基準測試時發生運行時異常
- 28. 如何在C#中執行時間記錄器類包裝器
- 29. 以動態檢索記錄類型值
- 30. 類型檢測
爲什麼不引用'FSharp.Core'? – scrwtp
因爲基本上爲一個函數添加一個依賴關係到庫是矯枉過正的,並且膨脹了另一個庫的依賴關係樹。 –
的確如此,但如果您已經在意識別F#記錄,那麼無論如何您都可能需要該依賴項。 – scrwtp