我有一个称为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

10-06 10:16