簡體   English   中英

通過反射創建F#記錄

[英]Creating F# record through reflection

如何使用反射在F#中創建記錄類型? 謝謝

您可以使用FSharpValue.MakeRecord [MSDN]來創建記錄實例,但我認為F#中沒有任何內容可用於定義記錄類型 但是,記錄編譯為簡單類,因此您可以像在C#中一樣構建類。 TypeBuilder [MSDN]可能是一個很好的起點。

UPDATE

[<CompilationMapping(SourceConstructFlags.RecordType)>]到該類型是使其成為記錄所需的全部內容。 這是一個如何在運行時執行此操作的示例。

let asmName = AssemblyName("Foo")
let asm = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndCollect)
let moduleBldr = asm.DefineDynamicModule("Test")
let typeBldr = moduleBldr.DefineType("MyRecord", TypeAttributes.Public)
let attrBldr = CustomAttributeBuilder(
                typeof<CompilationMappingAttribute>.GetConstructor([|typeof<SourceConstructFlags>|]), 
                [|box SourceConstructFlags.RecordType|])
typeBldr.SetCustomAttribute(attrBldr)
let typ = typeBldr.CreateType()
printfn "%b" <| FSharpType.IsRecord(typ) //true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM