如何在VB.net中动态编译代码?动态获取成员变量名

How to complie code dynamicly in VB.net? Retrieve member variable name dynamicly

例如,如果我有这样的代码

Private Function getCompleteAddress(ByVal sCountryCode as String, ByVal sStateCode as 
String, ByVal sCityCode as String) as String

    If sCountryCode ="US" 
          If StateCode = "AL"
             If CitiCode = "BHM"
                   getCompleteAddress=AddressBook.USALBHM
             End If
           ElseIf StateCode = "WA"
             If CitiCode = "SEA"
                   getCompleteAddress=AddressBook.USWASEA
             End If
           ElseIf StateCode = "ME"
             If CitiCode = "PWM"
                   getCompleteAddress=AddressBook.USMEPWM
             End If
           ElseIf StateCode = "PA"
             If CitiCode = "PHL"
                   getCompleteAddress=AddressBook.USPAPHL
             End If
           ElseIf
                ......
           ElseIf
                ......
End Function

我希望代码看起来像这样

Private Function getCompleteAddress(ByVal sCountryCode as String, ByVal sStateCode as 
String, ByVal sCityCode as String)
 
Dim sCombinedCode as String = sCountryCode + sStateCode + CityCode
getCompleteAddress = AddressBook.sCominedCode
    
End Function

可能吗?请注意 sCombinedCode 不是 AddressBook 的成员,它只是我想象的一种生成简短更清晰代码的方法。

阅读Access property using its name in vb.net

您可以使用

Private Function getCompleteAddress(ByVal sCountryCode As String, ByVal sStateCode As 
String, ByVal sCityCode as String)
 
Dim sCombinedCode As String = sCountryCode + sStateCode + CityCode
    getCompleteAddress = CallByName(AddressBook, sCountryCode & sStateCode & CityCode, Microsoft.VisualBasic.CallType.Get, Nothing)
End Function

或者

Module Module1
    Public Class AddressBookClass
        Public Property USALBHM As String = "USALBHM"
        Public Property USWASEA As String = "USWASEA"
        Public Function GetPropertyValue(ByVal obj As Object, ByVal PropName As String) As Object
            Dim objType As Type = obj.GetType()
            Dim pInfo As System.Reflection.PropertyInfo = objType.GetProperty(PropName)
            Dim PropValue As Object = pInfo.GetValue(obj, Reflection.BindingFlags.GetProperty, Nothing, Nothing, Nothing)
            Return PropValue
        End Function
    End Class

    Sub Main()
        Dim AddressBook As New AddressBookClass
        Console.WriteLine(AddressBook.GetPropertyValue(AddressBook, "USALBHM"))
        Console.ReadLine()
    End Sub
End Module

我把任何后果留给你:)