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

时间:2010-05-31 09:46:49

标签: vb.net reflection

例如:

Sub Test()
  Dim car as new MyCar
  car.chassis.wheel.radius = 15
  Console.WriteLine(car.chassis.wheel.radius)    
End Sub

所以问题是。是否可以使用其字符串名称访问该属性 东西(“car.chassis.wheel.radius”)= 15?

2 个答案:

答案 0 :(得分:12)

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

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

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

我将错误处理留给您。任何后果:)

答案 1 :(得分:3)

是的,你很容易:

Dim radius As Integer = CallByName(car.chassis.wheel, "radius", Microsoft.VisualBasic.CallType.Get, Nothing)

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