在vb.net中使用其名称访问属性

rqm*_*rik 9 vb.net reflection

例如:

Sub Test()
  Dim car as new MyCar
  car.chassis.wheel.radius = 15
  Console.WriteLine(car.chassis.wheel.radius)    
End Sub
Run Code Online (Sandbox Code Playgroud)

所以问题是.是否可以使用像Something("car.chassis.wheel.radius")= 15这样的字符串名称来访问该属性?

Mir*_*vec 14

你可以,但不像你的问题那样简洁.

此函数将按名称获取任何对象的任何属性.

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
Run Code Online (Sandbox Code Playgroud)

我给你留下错误处理.任何后果:)


pni*_*zle 5

是的,您可以非常轻松地:

Dim radius As Integer = CallByName(car.chassis.wheel, "radius", Microsoft.VisualBasic.CallType.Get, Nothing)
Run Code Online (Sandbox Code Playgroud)

请参阅此 Microsoft页面以供参考。