vb.net - 读取 regkey 时异常处理不起作用

vb.net - exception handling not working when reading regkey

提问人:John 提问时间:10/6/2020 更新时间:10/6/2020 访问量:50

问:

我的代码中有一个函数“ReadRegValue”......

 Public Function ReadRegValue(ByRef location As String, ByRef value As String)
    Try
        Console.WriteLine(location)
        Dim thisvalue As String = My.Computer.Registry.GetValue(location, value, vbnull).ToString
        Return thisvalue
    Catch ex As Exception
        Return vbNull
    End Try
 End Function

这一直工作正常,直到我在其中一个密钥不存在的设备上运行我的项目,因为该系统上没有安装特定程序。

在本例中,它引发了异常 - NullReferenceException:对象引用未设置为对象的实例。

我理解异常及其背后的原因,即密钥不存在,所以如何读取它;但我希望在键不存在或抛出任何其他异常的情况下它会返回 null。

谁能帮忙阐明为什么这个异常没有在 Try Catch 中被发现,或者我可能哪里出错了?

提前致谢。

vb.net 异常 注册表 NullReferenceException

评论

1赞 Craig 10/6/2020
什么 ?为什么没有给出 的返回类型?您确定未捕获异常吗?您可能将异常设置设置为在引发异常时中断(这是一个好主意),在这种情况下,您将在调试器中中断,但仍会捕获它。您是否确定问题是从 Try/Catch 中发出的 nullrefexception,而不是尝试返回时发出的异常或调用代码的异常?vbNullReadRegValuevbNullReadRegValue
0赞 John 10/6/2020
@Craig你是正确的......它正在捕获异常,但无论如何都会中断。
0赞 John 10/6/2020
感觉很傻。因此,如果函数中出现任何问题,则返回 vbnull,如果该值不存在,它也是提供的默认值......因此,从本质上讲,它以 null/nothing 开头,以 null/nothing 结束,除非键和值存在,在这种情况下,它返回值。感谢您的帮助。
2赞 jmcilhinney 10/6/2020
这看起来像 VB6 代码。转。指定方法的返回类型。停止无缘无故地声明参数。停止使用和用于表示任何对象。Option Strict OnByRefvbNullNothing
1赞 Craig 10/6/2020
我以前也曾被这种情况所吸引,即使多年来经常有非常激进的突破设置。

答:

0赞 John 10/6/2020 #1

正在处理异常,但异常设置设置为在 nullreferenceexception 中断,因此它似乎正在轰炸,但实际上并没有行为异常。