gpt4 book ai didi

vb.net - 当 finally block 中的代码抛出异常时会发生什么?

转载 作者:行者123 更新时间:2023-12-04 23:22:06 24 4
gpt4 key购买 nike

我有一个简单的遗留代码块,它位于一个循环中,该循环逐个节点地爬过一些潜在的坏 xml 节点,并且需要对其进行重构,因为它没有按预期工作:

Try
xmlFrag.LoadXml("<temproot>" & strXMLfragment & "</temproot>")
writer.WriteRaw(strXMLfragment)
Catch ex As Exception
InvalidXML = True
End Try

这个 block 的意思是检查有效的xml,然后把xml写出来。它实际上所做的是检查无效的 xml,然后将 xml 写出 仅限 如果它是有效的。所以需要修复它以按预期工作。

我第一次尝试修复:
Try
xmlFrag.LoadXml("<temproot>" & strXMLfragment & "</temproot>")
'writer.WriteRaw(strXMLfragment)
Catch ex As Exception
InvalidXML = True
Finally
writer.WriteRaw(strXMLfragment)
End Try

这适用于我的测试数据,但我担心 WriteRaw 可能会在其他数据上引发异常。我还没有找到关于什么会导致 WriteRaw 的结论性声明抛出异常以及在 Finally block 中的代码时会发生什么抛出异常。

所以我尝试像这样重写它:
Try
xmlFrag.LoadXml("<temproot>" & strXMLfragment & "</temproot>")
Catch ex As Exception
InvalidXML = True
End Try
Try
writer.WriteRaw(strXMLfragment)
Catch
End Try

坦率地说,它看起来丑得要命。有没有更优雅的方式来重构它,或者第一次尝试是否合适?

最佳答案

Finally 中出现异常时 block ,没有什么特别的事情发生:异常像任何其他异常一样向上传播,并且在这个 finally block 中的异常之后的代码将不会被执行。

如果 strXMLfragment,您的第一次尝试将失败。是 null或空字符串(或由于 already running asynchronous operation )。

因此,如果您真的想处理/吞下所有异常,则必须使用两个 Try block 。

关于vb.net - 当 finally block 中的代码抛出异常时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406380/

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