在这两个功能相同的XML文件上使用XML类型提供程序会为XML类型提供程序提供不同的结果。
XML文件1:
<?xml version="1.0" encoding="utf-8"?>
<params>
<mode >
<reg >0</reg>
</mode>
<mode >
<reg >1.7976931348623157E+308</reg>
</mode>
<mode></mode>
</params>
XML文件2:
<?xml version="1.0" encoding="utf-8"?>
<params>
<mode>
</mode>
<mode >
<reg >0</reg>
</mode>
<mode >
<reg >1.7976931348623157E+308</reg>
</mode>
</params>
请注意,唯一的区别是空“模式”位于一个文件的末尾,而另一个文件的开头位于另一个文件的末尾。
测试F#代码如下所示:
type Test = XmlProvider<""".\test.xml""">
type Test2 = XmlProvider<""".\test2.xml""">
let xml = Test.GetSample()
let list1 = [for mode in xml.Modes -> mode.Reg]
let xml2 = Test2.GetSample()
let list2 = [for mode in xml2.Modes -> mode.Reg]
list1的类型为“Option&lt; float&gt; list”,正如您所期望的那样。但是list2的类型为“float list”,这是不正确的并导致运行时异常。
为什么会发生这种情况?如何避免此问题?
答案 0 :(得分:3)
您使用的是哪种版本的F#数据?你试过最新的2.x吗?如果仍然无效,请在https://github.com/fsharp/FSharp.Data/issues
上提交问题答案 1 :(得分:1)
这已在最新的F#数据版本中修复