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

C# 从嵌套哈希表中按键获取值,c#,C#,我有一个嵌套的哈希表,看起来像这样 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 for

我有一个嵌套的哈希表,看起来像这样

  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
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"];
    }
}
这是我必须面对的,我不能让任何一位父亲改变这一切。因此,我需要能够通过从“table”哈希表开始调用键“file”来获取“foo”。我已经尝试了foreach和.key和.value的每个组合。我似乎无法理解,哈哈。谢谢你

你只需要做:

object foo = table[0]["post_option"]["file"];
您只需执行以下操作:

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

Hashtable
的枚举器的工作原理与
IDictionary
的枚举器类似,但它不是泛型的,因为它是一个古老的API,它来自.NET 1,在那里不存在泛型。因此,如果要使用
foreach
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
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"];
    }
}

Hashtable
的枚举器的工作原理与
IDictionary
的枚举器类似,但它不是泛型的,因为它是一个古老的API,它来自.NET 1,在那里不存在泛型。因此,如果要使用
foreach
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
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"];
    }
}

你不使用通用词典的原因是什么?是的,很遗憾,这不在我的控制范围之内,这正是我得到的。你为什么不使用通用词典?是的,很遗憾,这不在我的控制范围之内,这正是我得到的。这是假设“表”中只有一个。这就是为什么我需要循环它,假设“表”中只有一个。这就是为什么我需要在它上面循环这就是那张票,是的,这是一个我必须在这里处理的旧应用程序,为什么很有趣。对任何被否决的问题都感到惊讶。就是那张票,没错,这是我必须在这里处理的一个老应用程序,为什么这么有趣。对任何否决该问题的人都感到惊讶。