2010-06-01 8 views
3

J'ai une classeL'ajout de valeurs à un dictionnaire en utilisant la réflexion

class a 
{ 
    private Dictionary <int , string> m_Dict = new Dictionary<int , string>(); 
} 

d'un autre composant/classe doivent ajouter des valeurs au dictionnaire m_Dict utilisant la réflexion! Comment fait-on ça ? J'ai cherché et essayé mais n'a pas réussi.

+4

réflexion? Donner un marteau à un homme et tout ressemble à un clou! ... –

Répondre

3

Je suppose que vous voulez accéder au membre privé "m_Dict"?

a x = new a(); 

Dictionary dic = (Dictionary) x.GetType() 
        .GetField("m_Dict",BindingFlags.NonPublic|BindingFlags.Instance) 
        .GetValue(x); 

// do something with "dic" 

Mais ce qui est très mauvaise conception

+0

D'accord mais essayez de mettre quelques tests unitaires autour de EWS Managed API sans le faire. – jolySoft

3

Dictionnaire est une douleur, car il ne met pas en œuvre IList (quelque chose que je gémissais à propos de l'autre soir). Cela se résume à ce que vous avez disponible. La résolution de la méthode Add pour int/string est assez facile, mais si vous avez affaire à une réflexion de liste typique, vous aurez besoin de la méthode Add de ICollection<KeyValuePair<int,string>>.

Pour usage standard:

object data = new Dictionary<int, string>(); 
object key = 123; 
object value = "abc"; 
var add = data.GetType().GetMethod("Add", new[] { 
      key.GetType(), value.GetType() }); 
add.Invoke(data, new object[] { key, value }); 
Questions connexes