0

我正在学习 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”。

let parse(pageResult: DownloadPageResult) =
    if pageResult.ErrorOccured then 0
    else 
        let reader = new StringReader(pageResult.Source)
        let doc = XDocument.Load(reader)
        let ns = XNamespace.Get("a")
        let d = XName.Get("entry")
        doc.Elements(ns + d) |> Seq.length

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

4

1 回答 1

2

XNamespace.Addition 运算符采用anXNamespace和 a string。编译器抱怨是因为你试图在它期望的地方传递一个XName-typed 变量 ( ) 。dstring

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

doc.Elements(ns + d.LocalName) |> Seq.length

或者,正如 Tomas 指出的那样,您甚至不需要创建d变量,您可以直接使用名称,如下所示:

doc.Elements(ns + "entry") |> Seq.length
于 2013-06-03T22:54:37.120 回答