【问题标题】:System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'System.Collections.IEnumerable'System.InvalidCastException:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“System.Collections.IEnumerable”
【发布时间】:2014-03-20 19:40:17
【问题描述】:

将对象转换为 IEnumerable 时出现以下异常。

这是我使用 VS2008 构建并打算在 IE8 上运行的自动化项目的一部分,现在我正在尝试使用 VS2010 并在 IE9 上运行。

System.InvalidCastException:无法转换类型的 COM 对象 'System.__ComObject' 到接口类型 'System.Collections.IEnumerable'。此操作失败,因为 对具有 IID 的接口的 COM 组件上的 QueryInterface 调用 “{496B0ABE-CDEE-11D3-88E8-00902754C43A}”由于以下原因而失败 错误:'不支持此类接口(来自 HRESULT 的异常: 0x80004002 (E_NOINTERFACE))'且COM组件不支持 IDispatch::Invoke 调用 DISPID_NEWENUM。

 HTMLDocument doc = some htmldocument
 IHTMLElement ele = doc.getElementById("some property");

 int iTab = (int)ele.getAttribute("someproperty", 0);
 object oTab = ele.getAttribute("property", 1);

 IEnumerable xyz = (IEnumerable)oTab;
 System.Collections.IEnumerator index = xyz.GetEnumerator();

【问题讨论】:

  • 它在 IE8 上工作,但它可能在 IE9 上失败
  • 我又检查了一遍,相同的代码适用于 IE8,但在 IE9 上出现错误。

标签: c# casting automation mshtml


【解决方案1】:

正如错误消息所说的那样。 oTab 中的对象没有实现 IEnumerable。无论是什么推理让你认为它确实如此,都是错误的。

首先检查oTab 的值。

【讨论】:

  • 我仍然无法弄清楚,任何进一步的提示。
  • 好吧,oTab 是什么?
  • oTab 是一个存储从 getattribute 返回的 System._Comobject 的对象。奇怪的是,在 Ie8 otab 中是 Ienumerable,但在具有 Ie9 oTab 的系统上执行时相同的代码不是 Ienumerable。我应该采取的下一步是无法获得 whta。提前致谢,
猜你喜欢
  • 2018-06-20
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 2016-02-02
相关资源
最近更新 更多