Laden...

PropertyInfo.SetValue auf T => Object does not match target type

Erstellt von DevHB vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.043 Views
D
DevHB Themenstarter:in
211 Beiträge seit 2006
vor 16 Jahren
PropertyInfo.SetValue auf T => Object does not match target type

Guten Morgen zusammen,

ich habe folgende Methode:


public class MapperBase<T> where T : class
{
    
     public T Map()
     {    
          // get Type of T
          Type t = typeof(T);
        
          // get all Properties
          PropertyInfo[] infos = t.GetProperties();

          // run through properties
          foreach (PropertyInfo  pi in infos)
         {
             object[] attribs = pi.GetCustomAttributes(typeof(MapAttribute), true); 
             
                // did we have an MapAttribute ?
                if ( (attribs != null) && (attribs.Length > 0) )
                {
                      // Hier kracht es mit der Meldung
                      // Object does not match target type
                      pi.SetValue( t, value, null );
                }
         }
     }
}

Ich bekomme bei dem "pi.SetValue(...)" eine TargetException, sehe aber grade das Problem nicht.
Wie kann für "T" Werte seiner Properties setzen ?

Vielen herzlichen Dank.

Gruß

DevHB

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo DevHB,

die Fehlermeldung ist doch eindeutig. Der Wert, den du setzen willst, passt nicht zu dem Typ der Property.

herbivore

D
DevHB Themenstarter:in
211 Beiträge seit 2006
vor 16 Jahren

Hallo,

mmh, ich dachte, die Meldung würde auf t (= typeof(T) ) zielen.

T ist in meinem Fall eine simple Klasse mit 3 Properties (alle String).
Wenn ich nun


string s ="test";
pi.SetValue (t , s, null);

mache, bekomme ich immer noch die gleiche Meldung.
"pi" ist vom Type System.String.

Vielen Dank.

Gruß

DevHB

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo DevHB,

statt t musst du natürlich das Objekt angeben, dessen Property du setzen willst.

public virtual void SetValue (  
  Object obj,  
  Object value,  
  Object[] index  
)  

obj
Das Objekt, dessen Eigenschaftenwert festgelegt wird.

Ein Blick in die :rtfm: Doku vor dem Posten schadet also nichts.

herbivore

O
778 Beiträge seit 2007
vor 16 Jahren

du musst an SetValue ja auch eine Instanz des Typs, nicht das Typobjekt, übergeben. Bei statischen properties müsste man den ersten Parameter gämzlich weglassen (null), der zweite Parameter ist immer der Wert und der dritte, ja, der dritte sind die Parameter für den Aufruf. Als C#er gibt es aber genau eine Art von parametrisierten properties, nämlich Indexer. Aber wenn du Code aufrufst, der e.g. in VB.NET geschrieben wurde, dann ist da tw. auch ein dritter Parameter notwendig.