2012-10-26 22 views
5

Biorąc pod uwagę podstawową definicję klasy:Jak dynamicznie ustawić wartość właściwości instancji obiektu za pomocą odbicia?

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); 
    } 
} 

Ten przykładowy kod jest uproszczona, a nie za pomocą dynamicznej konwersji typu, po prostu chcę próbka robocza, aby ustawić tę właściwość na przykład.

Edycja: nazwa właściwości i wartość właściwości w powyższym kodzie jest również uproszczona.

góry dzięki

+0

Jaki problem można dostać z aktualnym kodem? –

+0

@CuongLe próbuje ustawić wartość właściwości, która należy do typu 'Car' na instancji typu' System.Type' która nie zadziała –

Odpowiedz

7

Pierwszy argument przekazać powinny być instancja posiadających właściwość, którą chcesz ustawić. Jeśli dla pierwszego argumentu jest to przekazanie właściwości statycznej o wartości null. W twoim przypadku zmiany kodu do:

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

dla naiwnej konwersji typu można zrobić

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

Yup - to działało jak czar! –

Powiązane problemy