从嵌套哈希表中按键获取值

时间:2013-04-02 04:51:01

标签: c#

我有一个嵌套的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 个答案:

答案 0 :(得分:1)

Hashtable的枚举器类似于IDictionary<TKey,TValue>的枚举器,但它不是通用的,因为它是来自.NET 1的古代API,其中不存在泛型。因此,如果您想使用Hashtable迭代foreach,则需要指定项目的类型。如果HashtableDictionaryEntry

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"];
    }
}

答案 1 :(得分:0)

你只需要这样做:

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