2013-04-02 99 views
1

我有一個嵌套的Hashtable,看起來像這樣。通過嵌套哈希表中的鍵獲得價值

Hashtable table = new Hashtable(); 
    Hashtable subtable = new Hashtable(); 
    Hashtable options = new Hashtable(); 

    options.Add("file","foo"); 
    subtable.Add("post_option",options); 
    table.Add(0,subtable); 

    //foreach here 

這是我必須與之合作,我不能讓任何父親上鍊改變它是什麼。所以我需要做的就是通過調用從「table」哈希表開始的關鍵「文件」來獲得「foo」。我已經嘗試過每一個foreach和.Keys和.Values的組合。我似乎無法得到它大聲笑。謝謝

+2

任何你沒有使用泛型Dictionary的原因? http://msdn.microsoft.com/en-us/library/xfhwa508.aspx – shf301

+0

是的,可悲的是,這不是我的控制權,這正是我回來的。 –

回答

1

Hashtable枚舉器的工作原理類似的IDictionary<TKey,TValue>枚舉,但因爲它是古老的API從.NET 1從哪裏來不存在仿製藥是不通用的。所以,如果你想迭代Hashtableforeach你需要指定項目的類型。在Hashtable的情況下,它是DictionaryEntry

foreach(DictionaryEntry tableEntry in table) 
{ 
    // your logic 
} 

如果你不知道前兩個表的鍵,那麼你需要做這樣的事情。

foreach(DictionaryEntry tableEntry in table) 
{ 
    Hashtable subtable = tableEntry.Value as Hashtable; 
    if (subtable == null) 
     continue; 
    foreach(DictionaryEntry subtableEntry in subtable) 
    { 
     Hashtable options = subtableEntry.Value as Hashtable; 
     if (options == null) 
      continue; 

     object file = options["file"]; 
    } 
} 
+0

這就是那張票,而且是正確的,這是我必須在這裏處理的一箇舊應用程序,以及爲什麼funkiness。驚訝任何downvoted的問題。 –

0

你只需要做:

object foo = table[0]["post_option"]["file"]; 
+0

這是假設在「表」中只有一個。這就是爲什麼我需要循環它 –