.net XNamespace+;XName:type';XName';与类型';字符串';

.net XNamespace+;XName:type';XName';与类型';字符串';,.net,f#,linq-to-xml,xname,.net,F#,Linq To Xml,Xname,我正在学习F#,并试图编写一个简单的XML解析器。在C#中,我可以轻松地使用+运算符组合名称空间和名称,但在F#中则不行。我在下面代码的最后一行遇到以下错误: Error 1 Type constraint mismatch. The type XName is not compatible with type string The type 'XName' is not compatible with the type 'string' 这是代

我正在学习F#,并试图编写一个简单的XML解析器。在C#中,我可以轻松地使用+运算符组合名称空间和名称,但在F#中则不行。我在下面代码的最后一行遇到以下错误:

Error   1   Type constraint mismatch. The type 
    XName    
is not compatible with type
    string    
The type 'XName' is not compatible with the type 'string'   
这是代码。编译器不喜欢“ns+d”

知道我为什么会看到这个吗?谢谢

采用
XNamespace
字符串。编译器正在抱怨,因为您试图传递一个
XName
类型的变量(
d
),而它需要一个
字符串

如果您将最后一行更改为:

doc.Elements(ns + d.LocalName) |> Seq.length
或者,正如Tomas指出的,您甚至不需要创建
d
变量,您可以直接使用名称,如下所示:

doc.Elements(ns + "entry") |> Seq.length

+1顺便说一句:在这种情况下,您可能只需编写
ns+“entry”
,因为
XName
d
是在前一行构造的(没有明显的原因…)@TomasPetricek,您完全正确——我已将其添加到我的答案中。另外,如果您正在解析具有相当静态结构的XML文件(而且您有一个很好的示例输入),然后您可以尝试使用F#Data中的XML类型提供程序:这可能会让您的生活更轻松!
doc.Elements(ns + "entry") |> Seq.length