2010-05-31 11 views
7

Por ejemplo:propiedad de acceso utilizando su nombre en vb.net

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

Así que la pregunta es. ¿Es posible acceder a la propiedad usando su nombre de cadena como Something ("car.chassis.wheel.radius") = 15?

+1

¿Por qué le gustaría especificar su nombre como un literal de cadena? –

+0

Tengo que actualizar los valores de las propiedades del objeto de muchos controles, y es mucho más fácil hacerlo de forma dinámica que asignar valores directamente para cada propiedad. –

Respuesta

9

Puede, pero no es tan conciso como en su pregunta.

Esta función obtendrá cualquier propiedad de cualquier objeto por su nombre.

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 

Dejo el manejo de errores para usted. Y las consecuencias :)

2

Sí se puede muy fácilmente:

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

Ver this Microsoft página como referencia.

+0

Esto me ayudó. Pero recuerda que tiene un efecto severo en el rendimiento cuando usas esto en un bucle. –

Cuestiones relacionadas