HtmlNode类型与'Nullable <'a>'类型不匹配?

时间:2018-07-27 14:40:02

标签: f#

我正在使用HtmlAgilityPack解析一些HTML文件。以下代码

let html = "<div>...</div>"
let doc = new HtmlDocument()
doc.LoadHtml(html)
let node = doc.DocumentNode

let x = node.SelectSingleNode("//div/@xyz") 
        |> Option.ofNullable

最后一行出现

错误
  

HtmlNode类型与'Nullable <'a>'类型不匹配

以下代码可以将其转换

let ofNull = function
    | null -> None
    | x -> Some x

是否有内置的结构可以做到这一点?我不希望我的ofnull定义分散在代码/脚本中的任何地方。

1 个答案:

答案 0 :(得分:3)

您要查找的内置函数是Option.ofObj,而不是Option.ofNullable

Option.ofNullable转换类型System.Nullable<'a>的值,该类型是.NET类型,用于将值类型转换为可空类型。 C#为此提供了语言支持,例如,您可以使用int?来定义与F#中的option<int>类似的类型。

Option.ofObj函数采用任何.NET obj(实际上是具有null作为值的通用类型)并返回Some(如果不是{{ 1}}或null(如果是None)。类型是:

null