2017-01-10 8 views
2

Ich habe eine einfache Klasse mit 2 Eigenschaften zu ändern:Mit Benutzereingabe eine Eigenschaft

class Circle { 
protected int x = 0 {get; set;} 
protected int y = 0 {get; set;} 
} 

ich eine andere Klasse, wo der Benutzer schreiben können, welche Eigenschaft er sich ändern will.

string selectProperty = Input.ReadString("Write which property to you want to change"); 

In der gleichen Klasse habe ich ein Kreis Objekt, und ich möchte nur den Wert einer Eigenschaft ändern, seine Auswahl nach, bis 5.

circle.selectProperty = 5; 

Dies ist nur kleines Beispiel, ich will die Grundidee wissen, also 2 kleine "wenn" s nicht helfen wird ...
Danke!

+1

Versuchen Sie Folgendes: 'circle.GetType(). GetProperty (selectProperty) .SetValue (circle, 5)' – Fabjan

+0

Was möchten Sie erreichen? –

+0

@Fabjan Das funktioniert nicht ... irgendeine Idee warum? – user7399016

Antwort

2

Ich denke, dass Sie Reflexion verwenden möchten.

Circle circle = new Circle(); 
string selectProperty = Input.ReadString("Write which property to you want to change"); 
string selectedValue = Input.ReadString("Write which value should be written"); 
PropertyInfo propertyInfo = circle.GetType().GetProperty(selectedProperty); 
propertyInfo.SetValue(circle, Convert.ChangeType(selectedValue, propertyInfo.PropertyType), null); 

Das sollte Ihnen eine Idee geben.

+0

Was ist das PropertyInfo Ding? – user7399016

+0

Eine Klasse des Reflection-Namespace, die Funktionen zum dynamischen Zugriff auf Eigenschaften von Klassen bereitstellt (in Ihrem Fall greifen Sie auf Eigenschaften über ihren Namen zu). Sehen Sie sich ein Tutorial zur .NET-Reflektion an. Grundsätzlich können Sie zur Laufzeit auf kompilierte Objekte zugreifen, die Ihnen große Möglichkeiten bieten. –