2010-05-31 14 views
7

Ad esempio:proprietà di accesso utilizzando il suo nome in vb.net

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

Così domanda è. E 'possibile accedere alla proprietà utilizzando il suo nome stringa come Something ("car.chassis.wheel.radius") = 15?

+1

perché si vuole specificare il suo nome come una stringa letterale? –

+0

Devo aggiornare i valori delle proprietà dell'oggetto da molti controlli, ed è molto più facile farlo dinamicamente che assegnare direttamente i valori per ogni proprietà. –

risposta

9

È possibile, ma non il più conciso nella sua interrogazione.

Questa funzione permette di scaricare qualsiasi proprietà di un oggetto in base al nome.

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 

Lascio la gestione degli errori a voi. E le conseguenze :)

2

Sì, è possibile con estrema facilità:

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

Vedere this Microsoft pagina per riferimento.

+0

Questo mi ha aiutato. Ma ricorda che ha un grave effetto sulle prestazioni quando lo usi su un loop. –

Problemi correlati