【问题标题】:How to convert NameValueCollection to Hashtable如何将 NameValueCollection 转换为 Hashtable
【发布时间】:2011-08-01 19:31:36
【问题描述】:

我有一个NameValueCollection 对象,我需要将它转换为Hashtable 对象,最好是在一行代码中。我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net .net-3.5


    【解决方案1】:

    您应该考虑使用通用的Dictionary,因为它是强类型的,而Hashtable 不是。试试这个:

    NameValueCollection col = new NameValueCollection();
    col.Add("red", "rouge");
    col.Add("green", "verde");
    col.Add("blue", "azul");
    
    var dict = col.AllKeys
                  .ToDictionary(k => k, k => col[k]);
    

    编辑:根据您的评论,要获得 HashTable,您仍然可以使用上述方法并再添加一行。您总是可以在一行中完成这项工作,但两行更具可读性。

    Hashtable hashTable = new Hashtable(dict);
    

    或者,使用循环的 pre-.NET 3.5 方法是:

    Hashtable hashTable = new Hashtable();
    foreach (string key in col)
    {
        hashTable.Add(key, col[key]);
    }
    

    【讨论】:

    • 问题是我使用的 API 需要 Hashtable 所以不能使用 Dictionary...
    • 这里有个问题。 NameValueCollection 允许重复键。在这种情况下,为 HashTable 中的同一键插入所有值。每个唯一键只有一个条目。例如如果您针对“rouge”和“verde”值列出了两次“red”键,则这两个值将针对哈希键“red”作为单个键列出。
    • @Priyank 好点!根据 OP 的需要,需要进行一些后期处理以应用任何特殊处理。
    【解决方案2】:

    它需要不止一行,但它非常简单

    NameValueCollection nv = new NameValueCollection();
    Hashtable hashTable = new Hashtable();
    
    nv.Add("test", "test");
    
    foreach (string key in nv.Keys)
    {
        hashTable.Add(key, nv[key]);
    }
    

    它按预期编译和执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      相关资源
      最近更新 更多