2013-04-02 65 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

这是假设在“表”中只有一个。这就是为什么我需要循环它 –