2010-05-31 7 views
7

Par exemple:propriété d'accès en utilisant son nom dans vb.net

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

Alors question. Est-il possible d'accéder à la propriété en utilisant son nom de chaîne comme Quelque chose ("car.chassis.wheel.radius") = 15?

+1

Pourquoi voudriez-vous spécifier son nom en tant que chaîne littérale? –

+0

Je dois mettre à jour les valeurs des propriétés de l'objet à partir de nombreux contrôles, et il est beaucoup plus facile de le faire dynamiquement que d'attribuer directement des valeurs pour chaque propriété. –

Répondre

9

Vous pouvez, mais pas aussi concis que dans votre question.

Cette fonction obtiendra n'importe quelle propriété d'un objet par son nom.

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 

Je laisse la gestion des erreurs à vous. Et les conséquences :)

2

Oui, vous pouvez très facilement:

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

Voir this Microsoft page pour référence.

+0

Cela m'a aidé. Mais rappelez-vous qu'il a un effet sévère sur les performances lorsque vous l'utilisez sur une boucle. –

Questions connexes