【问题标题】:vb.net - exception handling not working when reading regkeyvb.net - 读取 regkey 时异常处理不起作用
【发布时间】:2021-01-21 09:46:23
【问题描述】:

我的代码中有一个函数“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: Object reference not set to an instance of an object。

我了解异常及其背后的原因,即密钥不存在,如何读取;但我希望它在密钥不存在或引发任何其他异常的情况下返回 null。

谁能帮助解释一下为什么这个异常没有在 Try Catch 中捕获或者我可能哪里出错了?

提前致谢。

【问题讨论】:

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

标签: vb.net exception registry nullreferenceexception


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2011-03-03
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多