【问题标题】:Problems with ParamArray on XDocument constructorXDocument 构造函数上的 ParamArray 问题
【发布时间】:2019-09-21 16:11:18
【问题描述】:

XDocument 有一个重载的构造函数。

XDocument()
XDocument([ParamArray] content: obj[])
XDocument(XDocument)
XDocument(XDeclaration,[ParamArray] content: obj[])

所以当我尝试创建XDocument

    new XDocument(
        new XDeclaration("1.0", "utf-8", "no"),
        new XElement(XName.Get "Foo"))

它给了我错误

方法 XDocument 的唯一重载...

我假设它无法确定是否使用

XDocument([ParamArray] content: obj[])

XDocument(XDeclaration,[ParamArray] content: obj[])

如何强制它选择正确的?

【问题讨论】:

    标签: f# overloading overload-resolution


    【解决方案1】:

    啊...我找到了答案

    https://nbevans.wordpress.com/2015/04/15/super-skinny-xml-document-generation-with-f/

    let XDeclaration version encoding standalone = XDeclaration(version, encoding, standalone)
    let XLocalName localName namespaceName = XName.Get(localName, namespaceName)
    let XName expandedName = XName.Get(expandedName)
    let XDocument xdecl content = XDocument(xdecl, content |> Seq.map (fun v -> v :> obj) |> Seq.toArray)
    let XComment (value:string) = XComment(value) :> obj
    let XElementNS localName namespaceName content = XElement(XLocalName localName namespaceName, content |> Seq.map (fun v -> v :> obj) |> Seq.toArray) :> obj
    let XElement expandedName content = XElement(XName expandedName, content |> Seq.map (fun v -> v :> obj) |> Seq.toArray) :> obj
    let XAttributeNS localName namespaceName value = XAttribute(XLocalName localName namespaceName, value) :> obj
    let XAttribute expandedName value = XAttribute(XName expandedName, value) :> obj
    

    即看起来我必须将我的内容显式转换为对象数组,以便它可以选择正确的重载。

    【讨论】:

      【解决方案2】:

      您可以:

      • 参数数组的框元素:box (new XElement(XName.Get "Foo"))
      • 使数组显式,并将其拆箱到obj []unbox [| new XElement(XName.Get "Foo") |]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多