【问题标题】:Unable to cast object of type 'HtmlAgilityPack.HtmlDocument' to type 'mshtml.IHTMLDocument2'无法将“HtmlAgilityPack.HtmlDocument”类型的对象转换为“mshtml.IHTMLDocument2”类型
【发布时间】:2017-07-06 21:27:58
【问题描述】:

iam to Unable to cast object of type 'HtmlAgilityPack.HtmlDocument' to type 'mshtml.IHTMLDocument2'

HTMLDocument doc = new HTMLDocument();
IHTMLDocument2 doc2 = (IHTMLDocument2)doc;    

【问题讨论】:

  • 似乎错误是非常自我描述的。您不能将 A 类型转换为 B 类型,就像您不能将布尔值转换为日期一样
  • 这样我们就可以把system.windowsforms.document转换成html IHTMLDocument2 IHTMLDocument2 doc = (IHTMLDocument2)webBrowserDomDocument.Document.DomDocument;这是可能的,但我也将在 HTML AgilityP ack 中进行转换

标签: c#


【解决方案1】:

为了将类型A 转换为类型B,以下其中一项应为真

  • 类型A应该继承自类型B,或者如果它是一个接口,它应该实现类型B。在这种情况下,隐式转换将起作用
  • B 类型应继承自 A 类型,并且您要转换的变量应包含 B 类型的实例。
  • 在任一执行转换的类型中都应该定义explicit operator

如果没有一个是真的,那么你会得到一个运行时异常。对于HtmlAgilityPack.HtmlDocumentmshtml.IHTMLDocument2 类型,这两个条件都不满足。

更新: 似乎您有错字 - 而不是将 doc 变量声明为 HTMLDocument,而是将其声明为 HtmlDocument。 C# 是区分大小写的语言。

延伸阅读:Casting and Type Conversions (C# Programming Guide)

【讨论】:

  • 你不知道 HtmlAgilityPack.HtmlDocument
  • @chandu 你正在使用它,你在问题中提到它
  • 在这个链接堆栈中看到这个stackoverflow.com/questions/33029448/…,流程团队说它是正确的,但它不起作用。
  • @chandu 答案是一样的
【解决方案2】:

这是因为HTMLDocument 没有实现IHTMLDocument2,所以没有已知的执行转换的路径。

【讨论】:

  • 不需要实现
  • 在这种情况下,这是因为没有定义明确的运算符来执行转换。如果您从 object1 转换为 object2,那么这些类型之间必须存在某种关系,例如继承、实现或告诉转换应该如何工作的运算符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
相关资源
最近更新 更多