2013-12-19 30 views
2

我需要的是Skip方法返回我的收藏,正确地转换为正确的类型:有道结果从跳过LINQ方法转换

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方法来转换类型,但我不会。我想知道一个合适(和简短)的方式来完成转换。

+0

你在哪里得到例外?在'cast'行或者指定给'htmlnodes_Albums' – JaredPar

+0

@JaredPar在投线 – ElektroStudios

回答

4

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)() 
+1

这似乎是唯一的解决方案,因为HtmlNodeCollection没有接受IEnumerable或AddRange方法的构造函数 –

+0

@PanagiotisKanavos对。我也是这样看的。显然,如果你需要它作为'HtmlNodeCollection',你必须为每个节点分别调用'Add'方法。 –

+0

感谢您的解决方案,解决了并且等待能够将其标记为已接受,只需要澄清一件事,使用您的解决方案无需在跳过后投射,无需投射即可正常工作,再次感谢 – ElektroStudios