2012-10-26 21 views
5

dato una definizione della classe base:Come impostare dinamicamente il valore di una proprietà dell'istanza dell'oggetto utilizzando la riflessione?

using System.Reflection; 

public class Car() 
{ 
    public int speed {get;set;} 

    public void setSpeed() 
    { 
     Type type = this.GetType(); 
     PropertyInfo property = type.GetProperty(PropertyName); 
     property.SetValue(type, Convert.ToInt32(PropertyValue), null); 
    } 
} 

Questo esempio di codice è semplificato e non usando la conversione di tipo dinamico, voglio solo un campione di lavoro per impostare la proprietà sull'istanza.

Modifica: PropertyName e PropertyValue nel codice sopra sono anche semplificati.

Grazie in anticipo

+0

Quale problema che si ottiene con il codice attuale? –

+0

@CuongLe sta cercando di impostare il valore di una proprietà che appartiene al tipo 'Car' su un'istanza di tipo 'System.Type' che non funzionerà –

risposta

7

il primo argomento si passa dovrebbe essere l'istanza che detiene la proprietà che si desidera impostare. Se si tratta di una proprietà statica, passa null per il primo argomento. Nel tuo caso modificare il codice a:

public void setSpeed() 
    { 
     Type type = this.GetType(); 
     PropertyInfo property = type.GetProperty(PropertyName); 
     property.SetValue(this, Convert.ToInt32(PropertyValue), null); 
    } 

per una conversione di tipo ingenuo che si possa fare

var value = Convert.ChangeType(PropertyValue,property.PropertyType); 
    property.SetValue(this, value, null); 
+0

Yup - che ha funzionato come un incantesimo! –

Problemi correlati