将列表转换为我的类型的实例

dem*_*mas 1 f#

我有类似的声明:

[<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元素.

是否存在通过这种方式从列表中创建我的类型实例的通用方法,因此列表中的每个元素都将是该类型的对应字段?

scr*_*wtp 5

您可以使用反射创建记录类型的实例.请考虑以下代码:

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)

唯一可能棘手的是以正确的顺序获取值,以便它们最终出现在正确的字段中.

我相信你想要的顺序是声明的顺序,但如果你的列表中的值用字段名称标记,你可能想要实现那个排序逻辑,只是为了安全起见.