我有类似的声明:
[<DataContract>]
type Defect =
{
[<field: DataMember(Name="referenceId")>]
Referenceid : string
[<field: DataMember(Name="comment")>]
Comment : string
[<field: DataMember(Name="start")>]
Start : DateTime
[<field: DataMember(Name="finish")>]
Finish : DateTime
}
Run Code Online (Sandbox Code Playgroud)
这种类型有4个字段.我有4个元素的列表.我有其他类型的n字段.我列出了n元素.
是否存在通过这种方式从列表中创建我的类型实例的通用方法,因此列表中的每个元素都将是该类型的对应字段?
您可以使用反射创建记录类型的实例.请考虑以下代码:
let make<'record> (values: obj []) =
let typ = typeof<'record>
let fieldInfos = FSharpType.GetRecordFields(typ)
let orderedValues =
// here you might need to reorder values using fieldInfos
...
FSharpValue.MakeRecord(typ, values) :?> 'record
Run Code Online (Sandbox Code Playgroud)
唯一可能棘手的是以正确的顺序获取值,以便它们最终出现在正确的字段中.
我相信你想要的顺序是声明的顺序,但如果你的列表中的值用字段名称标记,你可能想要实现那个排序逻辑,只是为了安全起见.