【问题标题】:Proper way to convert results from the Skip LINQ method从 Skip LINQ 方法转换结果的正确方法
【发布时间】:2013-12-19 14:59:40
【问题描述】:

我需要将Skip 方法返回给我的集合正确转换为正确的类型:

Dim htmlnodes_Albums As HtmlAgilityPack.HtmlNodeCollection = Nothing

htmlnodes_Albums =
    htmldoc_RawSource.DocumentNode.
    SelectNodes("//h1[@class='pageheader']").
    Skip(1).
    Cast(Of HtmlAgilityPack.HtmlNode)()

问题是上面的代码抛出了一个强制转换异常,我也试过CType

我可以取消定义 htmlnodes_Albums 的类型或编写一个长的 LINQ 方法来转换类型,但我不会。我想知道进行转换的正确(和简短)方法。

【问题讨论】:

  • 你在哪里得到异常?在Cast 行或分配给htmlnodes_Albums
  • @JaredPar 在演员阵容

标签: .net vb.net linq html-agility-pack


【解决方案1】:

LINQ 方法通常返回一个IEnumerable 对象,Cast 方法就是这种情况。试试这个:

Dim htmlnodes_Albums As IEnumerable(Of HtmlAgilityPack.HtmlNode) = Nothing

htmlnodes_Albums =
    htmldoc_RawSource.DocumentNode.
    SelectNodes("//h1[@class='pageheader']").
    Skip(1).
    Cast(Of HtmlAgilityPack.HtmlNode)()

【讨论】:

  • 这似乎是唯一的解决方案,因为 HtmlNodeCollection 没有接受 IEnumerable 或 AddRange 方法的构造函数
  • @PanagiotisKanavos 对。我也刚查了一下。显然,如果您需要它作为HtmlNodeCollection,则必须为每个节点分别调用Add 方法。
  • 感谢您的解决方案,已解决并等待能够将其标记为已接受,我将澄清一件事,使用您的解决方案无需在跳过后进行转换,无需转换即可正常工作,再次感谢
  • 对,没有理由将其转换为任何其他类型,除非您出于其他原因需要。如果您只需要遍历结果,IEnumerable 接口应该完全符合您的需求。
猜你喜欢
  • 2018-05-09
  • 2011-08-09
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多