【发布时间】: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