gpt4 book ai didi

.net - 通过反射创建F#记录

转载 作者:行者123 更新时间:2023-12-04 10:05:21 28 4
gpt4 key购买 nike

如何使用反射在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

关于.net - 通过反射创建F#记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139223/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com