Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转换XmlProvider自动提供的选项类型<>;。域类型输入到F#中的枚举中?_Xml_F#_Enumeration_Type Providers_F# Data - Fatal编程技术网

如何转换XmlProvider自动提供的选项类型<>;。域类型输入到F#中的枚举中?

如何转换XmlProvider自动提供的选项类型<>;。域类型输入到F#中的枚举中?,xml,f#,enumeration,type-providers,f#-data,Xml,F#,Enumeration,Type Providers,F# Data,假设我有以下XML: <?xml version="1.0" encoding="UTF-16"?> <iAmConfused> <helpMe feeling="anger" strength="100" mapping="1-1" /> <helpMe feeling="frustration" strength="15" mapping="1-n" /> <helpMe feeling="helplessness

假设我有以下XML:

<?xml version="1.0" encoding="UTF-16"?>
<iAmConfused>
    <helpMe feeling="anger" strength="100" mapping="1-1" />
    <helpMe feeling="frustration" strength="15" mapping="1-n" />
    <helpMe feeling="helplessness" strength="365" mapping="1-1" />
    <helpMe feeling="despair" strength="-1" mapping="1-n" />
</iAmConfused>
然后将
替换为

string e.Strength
string (defaultArg e.Mapping "")
为我提供
“一些(1-1)”
“一些(1-n)”
以获得
帮助。映射
不是我想要的。
如果我试图将
替换为

string e.Strength
string (defaultArg e.Mapping "")
然后,FSI理所当然地抱怨:

test.fs(165,38): error FS0001: This expression was expected to have type
    'a option    
but here has type
    XmlProvider<...>.DomainTypes.MappingChoice
test.fs(165,38):错误FS0001:此表达式应具有类型
"选择",
但这里有一种类型
XmlProvider.DomainTypes.MappingChoice

要将字符串转换为
映射类型
,您可以定义一个小辅助函数:

let convert m =
    match m with
    | "1-1" -> mappingType.oneToOneMapping
    | _ -> mappingType.oneToManyMapping
这将使您能够编写投影,如:

let iWantThisMap =
    iAmConfusedXml.GetHelpMes()
    |> Seq.map (fun e -> e.Feeling, {
        strength = e.Strength;
        mapping = (e.Mapping.Value |> convert) })
    |> Map.ofSeq
现在,这里有点作弊,因为它只是调用
e.Mapping.Value
。如果
e.Mapping
None
,则可能会引发异常,但如果此处提供了数据,则会发生异常,因为
e.Mapping
始终具有值