加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#中使用AS时出现异常

发布时间:2020-12-16 00:11:50 所属栏目:百科 来源:网络整理
导读:写作时 var e = element.NextSibling as HtmlElement; 我收到了无效的强制转换异常.我以为防止强制转换异常并返回null?因为那就是我想要/除外的东西.或者告诉我如何让e变为null而不是异常?或者为什么我在使用as关键字时遇到此异常? -edit-纠正它是element
写作时

var e = element.NextSibling as HtmlElement;

我收到了无效的强制转换异常.我以为防止强制转换异常并返回null?因为那就是我想要/除外的东西.或者告诉我如何让e变为null而不是异常?或者为什么我在使用as关键字时遇到此异常?

-edit-纠正它是element.NextSibling抛出异常.当我还没有尝试施放它时,它抛出一个施法异常是多么奇怪.我不知道如何检查下一个兄弟是否存在. NextSibling中的错误如下

Message "Unable to cast COM object of type 'System.__ComObject' to interface type 'IHTMLElement'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{3050F1FF-98B5-11CF-BB82-00AA00BDCE0B}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."  string

解决方法

你确定这个特殊的语句导致异常被抛出吗?

如果你将它包装在try / catch块中以确定它是,请尝试将其分开:

var next = element.NextSibling;
var e = next as HtmlElement;

也许异常是从内部抛出的.NextSibling?

在任何情况下,都不可能在C#中覆盖as运算符,因此它应该始终执行您期望它执行的操作,而不是抛出该异常.我怀疑问题出在其他地方,但看起来它来自这个位置.

编辑:正如@Jon Skeet在他删除的答案中所建议的,我还建议你尝试在一个简短但完整的程序中复制问题,并在你的问题中发布程序,以便我们可以尝试自己重现问题.此外,尝试在较短的代码中重现问题可能会让您深入了解您在主项目中遇到的特定方案.

从代码来看,看起来你正在解析HTML代码.如果element是一个HtmlElement对象,那么.NextSibling方法本身不包含会产生该问题的强制转换,但它确实通过接口引用调用另一个.NextSibling方法,这意味着Reflector本身不会告诉我哪个对象是涉及到这里.

编辑以回应更新的问题:不幸的是,我无法帮助您解决问题的这一部分.

似乎对.NextSibling的调用在内部检索一个COM对象,它认为它应该实现IHTMLElement接口,但事实上并非如此.但是,此内部代码使用的是强硬转换,因此会因此异常而失败.

我认为你没有别的选择,只能在try / catch块中至少包含对.NextSibling的调用来避免这种情况,除非你能找到一些明显错误的HTML代码,它试图解析你可以纠正.

祝你好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读