gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:25:06 25 4
gpt4 key购买 nike

一边写

var e = element.NextSibling as HtmlElement;

我得到一个无效的转换异常。我认为 as 可以防止强制转换异常并返回 null?因为那是我想要/异常(exception)的。要么告诉我如何让 e 为 null 而不是异常?或者为什么在使用 as 关键字时出现此异常?

-edit- 更正它是 element.NextSibling 抛出的异常。当我还没有尝试转换它时它抛出一个转换异常是多么奇怪。我不确定如何检查下一个 sibling 是否存在。 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 block 中以确定它是,请尝试将其拆开:

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

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

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

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

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

针对更新后的问题进行编辑:很遗憾,我无法帮助您解决这部分问题。

似乎对 .NextSibling 的调用在内部检索了一个 COM 对象,它认为该对象应该实现 IHTMLElement 接口(interface),但实际上并没有。但是,此内部代码使用硬转换,因此失败并出现该异常。

我认为除了至少将对 .NextSibling 的调用包装在 try/catch block 中以避免这种情况外,我认为您别无选择,除非您能发现一些明显的错误它尝试解析的 HTML 代码,您可以改正。

祝你好运。

关于c# - 在 C# 中使用 AS 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com