有沒有辦法在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. 當從凸輪檢測到運動時,OpenCv C++記錄視頻
- 2. C運行時類型檢查
- 3. F#泛型記錄
- 4. printf類型的日誌記錄F#
- 5. 記錄類型的F#序列化
- 6. 在運行時檢測庫功能C
- 7. 何時使用歧視聯盟與F#中的記錄類型
- 8. F中泛型類型的運行時強制#
- 9. 運行F#測試
- 10. 如何在運行時檢查類型?
- 11. 測試中@testable導入對象的運行時類型檢查
- 12. 帶有Code First的EntityFramework:在運行時檢測實體類型
- 13. F#和NUnit:測試失敗時記錄類型的結構化輸出
- 14. 僅記錄在運行時
- 15. 運行Appium記錄測試
- 16. 運行時記錄
- 17. 在運行時檢測ContextDeadlockSwitch
- 18. 檢測在運行時
- 19. C++中的運行時類型信息
- 20. F#類型推斷與記錄奇行爲
- 21. EF在運行時從類型
- 22. 在F#中反映C#類型
- 23. VSTest.Console時/記錄器運行:Console不從測試方法
- 24. f#鏈表執行記錄
- 25. 針對指針的運行時類型檢測
- 26. 在excel中運行記錄宏時運行時錯誤
- 27. 如何在Dart中執行運行時類型檢查?
- 28. VB6運行時類型檢索
- 29. 代碼運行時檢查類型
- 30. PHP運行時類型檢查
爲什麼不引用'FSharp.Core'? – scrwtp
因爲基本上爲一個函數添加一個依賴關係到庫是矯枉過正的,並且膨脹了另一個庫的依賴關係樹。 –
的確如此,但如果您已經在意識別F#記錄,那麼無論如何您都可能需要該依賴項。 – scrwtp