Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用AS时发生异常#_C#_Exception - Fatal编程技术网

C# 在C中使用AS时发生异常#

C# 在C中使用AS时发生异常#,c#,exception,C#,Exception,写作时 var e = element.NextSibling as HtmlElement; 我得到一个无效的强制转换异常。我认为as可以防止强制转换异常并返回null?因为那正是我想要/期望的。或者告诉我如何使e为null而不是异常?或者为什么我在使用as关键字时会出现此异常 -编辑-更正引发异常的是element.NextSibling。奇怪的是,当我还没有尝试抛出一个cast异常时,它却抛出了一个cast异常。我不知道如何检查下一个兄弟姐妹是否存在。NextSibling中的错误如下所

写作时

var e = element.NextSibling as HtmlElement;
我得到一个无效的强制转换异常。我认为as可以防止强制转换异常并返回null?因为那正是我想要/期望的。或者告诉我如何使e为null而不是异常?或者为什么我在使用as关键字时会出现此异常

-编辑-更正引发异常的是element.NextSibling。奇怪的是,当我还没有尝试抛出一个cast异常时,它却抛出了一个cast异常。我不知道如何检查下一个兄弟姐妹是否存在。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
操作符,因此它应该始终执行您希望它执行的操作,而不是抛出该异常。我怀疑问题出在其他地方,但看起来它来自这个位置

编辑:正如在他删除的答案中所建议的,我还建议您尝试在一个简短但完整的程序中复制问题,并将程序张贴在您的问题中,以便我们可以尝试自己复制问题。此外,尝试在较短的代码段中重现问题可能会让您对主项目中遇到的特定场景有价值的了解

根据代码判断,您似乎正在解析HTML代码。如果
元素
是HtmleElement对象,那么
.NextSibling
方法本身不包含会产生该问题的强制转换,但它通过接口引用调用另一个
.NextSibling
方法,这意味着反射器本身不会告诉我这里涉及哪个对象

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

.NextSibling
的调用似乎在内部检索COM对象,它认为该对象应该实现IHTMlement接口,但实际上它没有。然而,这段内部代码使用的是硬转换,因此会因该异常而失败

我认为除了将对
.NextSibling
的调用至少包装在一个try/catch块中以避免这种情况之外,您没有其他选择,除非您可以发现它试图解析的HTML代码有一些明显的错误,您可以改为更正


祝你好运。

这似乎是一个基本问题。然而,它甚至践踏了乔恩·斯基特+1问题肯定出在别处。。。你能提供一些上下文代码吗?@ichiban:当我看到我的答案基本上涵盖了与Lasse的答案相同的理由时,我删除了它。这是可能的,但我不确定这是否会有那种效果。我想你是说,对于一个过时的pdb文件,来自另一个位置的异常看起来可能来自这个位置。如果这是这种情况下的一个可行结果,那么值得研究。