[英]Creating F# record through reflection
如何使用反射在F#中創建記錄類型? 謝謝
您可以使用FSharpValue.MakeRecord
[MSDN]來創建記錄實例,但我認為F#中沒有任何內容可用於定義記錄類型 。 但是,記錄編譯為簡單類,因此您可以像在C#中一樣構建類。 TypeBuilder
[MSDN]可能是一個很好的起點。
將[<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.