2017-06-02 5 views
0

Ich habe eine Hauptklasse, wo ich jede interne Eigenschaft in meiner Cleats-Klasseneigenschaft durchläuft. Jede interne Eigenschaft in meiner Klasse cleats hat den Typ BeltProperty (eine andere Klasse, die Informationen wie Wert und IDs enthält).System.Reflection.TargetException Fehler

private ObservableCollection<Cleats> _Cleats = new ObservableCollection<Cleats>(); 
    /// <summary> 
    /// Cleats 
    /// </summary> 
    public ObservableCollection<Cleats> Cleats { get { return _Cleats; } } 

foreach (PropertyInfo prop in typeof(Cleats) 
    .GetProperties(BindingFlags.Instance | BindingFlags.NonPublic)) 
{ 
    BeltProperty bp = new BeltProperty(); 
    bp = (BeltProperty)Cleats[Configurator_2016.Cleats.SelectedConfigurationIndex] 
     .GetType().GetProperty(prop.Name, BindingFlags.Instance | BindingFlags.NonPublic) 
     .GetValue(this, null); 
    //rest of the code... 
} 

Am ersten BeltProperty es findet es eine System.Reflection.TargetException wirft. Ich möchte wissen, ob es eine andere/bessere Möglichkeit gibt, die Eigenschaft von meiner Cleats Klasse zu bekommen. Vielen Dank im Voraus für jede Hilfe oder Beratung.

+0

Wahrscheinlich ist es wegen Ihrer Sende 'this' als Zielparameter an die' GetValue' Methode. aber dein Code ist nicht klar. Was ist 'Cleats.GetProperties'? Was ist 'Cleats [Configurator_2016.Cleats.SelectedConfigurationIndex]'? Stellen Sie sicher, alle relevanten Code –

+0

zu posten Ich habe versucht, statt Klicks in getValue und hat immer noch das gleiche Ergebnis. – andrewvb

+0

@andrewvb was ist die Art von 'Cleats'? Die Methode 'GetProperties' ist seltsam, zumindest ist nicht klar, wo sie sich befindet. –

Antwort

0

Nun, zuerst würde ich bessere Namen für die Klassen und Instanzen wählen.
ObservableCollection<Cleats> Cleats ist nicht geradeaus.

Das Problem, das Sie haben, ist wegen this Parameter in .GetValue(this, null);

Dieser Parameter die Instanz sein sollte, dass Sie versuchen, von der Eigenschaft zu lesen.

Der gesamte Code könnte wie folgt aussehen:

foreach (PropertyInfo prop in typeof(Cleats) 
    .GetProperties(BindingFlags.Instance | BindingFlags.NonPublic)) 
{ 
    var bp = (BeltProperty)prop.GetValue(Cleats[Configurator_2016.Cleats.SelectedConfigurationIndex]) 
} 
+1

Danke, Sie hatten Recht, ich hatte den GetValue-Inhalt falsch und ich musste das richtige Objekt angeben. – andrewvb