2010-06-01 68 views
3

增加值的詞典我有一個類使用反射

class a 
{ 
    private Dictionary <int , string> m_Dict = new Dictionary<int , string>(); 
} 
從其他組件/類

需要使用反射值添加到字典m_Dict!我該怎麼做 ?我搜索並嘗試,但沒有成功。

+4

反思?給一個男人一把錘子,一切看起來像一個釘子!... – 2010-06-01 08:26:31

回答

3

我假設你要訪問的私有成員 「m_Dict」?

a x = new a(); 

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

// do something with "dic" 

但是,這是非常糟糕的設計

+0

同意但嘗試圍繞EWS託管API進行一些單元測試而不這樣做。 – jolySoft 2014-10-09 09:34:16

3

詞典是一個痛苦,因爲它不實施IList(我只是在另一個晚上呻吟)。這真的取決於你有什麼可用。對於int/string解決Add方法很簡單,但如果您要處理典型的列表反射,則需要使用Add方法ICollection<KeyValuePair<int,string>>

對於標準用法:

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