我怎样才能抓住这个TypeInitializationException
?不关心它是C#还是VB.NET代码。下面是我想要弄清楚的一些示例代码(这不是真正的代码 - 只是显示我正在处理的内容):
Public Class Test
Public Shared testObj as Object = CreateObj()
Public Shared Function CreateObj() as Object
throw new Exception("Ha!")
End Function
Public Shared Sub Main()
Dim i as Integer = 0
End Sub
End Class
假设我无法控制CreateObj
方法。
答案 0 :(得分:1)
在VB中,根据应用程序的类型,您有几个选项。
如果应用程序是控制台应用程序或Windows窗体应用程序,那么您可以使用UnhandledException事件扩展My类。
Namespace My
Partial Friend Class MyApplication
Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
'Handle error here
End Sub
End Class
End Namespace
如果是ASP.Net网络应用程序,则将一些代码添加到Global.asax文件中(为简洁起见,下面的事件被截断)。
Public Class Global_asax
Inherits System.Web.HttpApplication
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Fires when an error occurs
End Sub
Private Sub Global_asax_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error
'Catches all errors
End Sub
End Class
通常,您不应该从类型初始值设定项中调用方法。使用类初始值设定项在Sub Main中设置初始值。
答案 1 :(得分:0)
只使用Try/Catch
块,就像任何其他异常一样......如果Main
是程序入口点,那你就不幸了,因为在你有一个例外之前可能会抛出异常有机会抓住它。我说“可能”因为我不确定VB中关于类型初始化的规则;如果它们与C#4中的相同,那么您发布的代码将运行正常,因为类型初始化程序在实际需要之前不会执行,并且在您的代码中它永远不必要(因为testObj
从未使用过)