我有一个称为LogException的Visual Basic方法,如果TRY..CATCH失败,该方法会将信息写入我的Exceptions数据库。该方法具有以下参数:
methodLocation;
methodName;
例外;
当我调用该方法时,我将使用以下代码:
_ex.LogException(
Me.GetType.Name.ToString,
MB.GetCurrentMethod.Name.ToString,
ex.Message.ToString)
因此,如果我在名为“ Test”的类中的“ Insert_Test”方法中调用此代码,则我希望第一个参数接收“ Test”,第二个参数接收“ Insert_Test”,第三个参数接收确切的详细信息从抛出的异常。
只要“ Test”类是基类,这一切都可以正常工作。如果“ Test”类是子类(例如,称为“ BigTest”),则前两个参数仍将作为“ Test”和“ Insert_Test”传递。我需要知道的是如何获取确切的类树,以便此方案中的第一个参数作为“ BigTest.Test”通过。
理想情况下,我希望能够做到这一点而不必将任何值硬编码到我的代码中,以便可以按原样重复使用该代码。
最佳答案
您可以使用如下函数:
Public Function GetFullType(ByVal type As Type) As String
Dim fullType As String = ""
While type IsNot GetType(Object)
If fullType = "" Then
fullType &= type.Name
Else
fullType = type.Name & "." & fullType
End If
type = type.BaseType
End While
Return fullType
End Function
并这样称呼它:
GetFullType(Me.GetType)
编辑:好像OP实际上是在使用嵌套类,而不是继承的类。在这种情况下,我发现this answer应该能够调整到提供的代码中。
嵌套类的代码:
Shared Function GetFullType(ByVal type As Type) As String
Dim fullType As String = ""
While type IsNot Nothing
If fullType = "" Then
fullType &= type.Name
Else
fullType = type.Name & "." & fullType
End If
type = type.DeclaringType
End While
Return fullType
End Function