NameValueCollection

NameValueCollection 是 .NET Framework 中的一个集合类,用于存储键值对集合,其中键和值都是字符串类型。它类似于字典,但允许一个键对应多个值,并且提供了方便的方法来操作这些键值对。

特点

  1. 键值对存储:NameValueCollection 存储的是键和值的集合,键和值都是字符串类型。
  2. 允许多值:与普通的字典不同,NameValueCollection 允许一个键对应多个值。
  3. 无序集合:集合中的键值对没有固定的顺序。
  4. 线程安全:NameValueCollection 本身不是线程安全的。如果需要在多线程环境中使用,需要手动同步。

常见方法和属性

  • Add(string name, string value):向集合中添加一个键值对。如果键已存在,则将值追加到该键对应的值列表中。
  • Get(string name):通过键获取值。如果键对应多个值,则返回这些值的逗号分隔字符串。
  • GetValues(string name):通过键获取值的字符串数组。
  • Remove(string name):移除指定键及其对应的值。
  • Clear():清空整个集合。
  • Keys:获取集合中所有键的集合。
  • Values:获取集合中所有值的集合。

示例代码

以下是一个简单的示例,展示了如何使用 NameValueCollection
csharp复制
using System;
using System.Collections.Specialized;

class Program
{
    static void Main()
    {
        // 创建一个 NameValueCollection
        NameValueCollection collection = new NameValueCollection();

        // 添加键值对
        collection.Add("Key1", "Value1");
        collection.Add("Key2", "Value2");
        collection.Add("Key1", "Value3"); // 同一个键可以添加多个值

        // 获取单个值
        string value = collection["Key1"]; // 返回 "Value1,Value3"(逗号分隔的字符串)
        Console.WriteLine($"Value for Key1: {value}");

        // 获取所有值
        string[] values = collection.GetValues("Key1");
        foreach (string v in values)
        {
            Console.WriteLine($"Value: {v}");
        }

        // 遍历所有键值对
        foreach (string key in collection.AllKeys)
        {
            Console.WriteLine($"Key: {key}, Values: {string.Join(",", collection.GetValues(key))}");
        }

        // 移除键值对
        collection.Remove("Key2");
        Console.WriteLine("After removing Key2:");
        foreach (string key in collection.AllKeys)
        {
            Console.WriteLine($"Key: {key}, Values: {string.Join(",", collection.GetValues(key))}");
        }

        // 清空集合
        collection.Clear();
        Console.WriteLine("After clearing the collection:");
        Console.WriteLine(collection.Count == 0 ? "Collection is empty" : "Collection is not empty");
    }
}

输出示例

复制
Value for Key1: Value1,Value3
Value: Value1
Value: Value3
Key: Key1, Values: Value1,Value3
Key: Key2, Values: Value2
After removing Key2:
Key: Key1, Values: Value1,Value3
After clearing the collection:
Collection is empty

适用场景

  1. 查询字符串解析:NameValueCollection 常用于解析 HTTP 查询字符串,因为查询字符串允许同一个键有多个值。
  2. 配置文件解析:在解析配置文件时,NameValueCollection 可以方便地存储键值对。
  3. 多值映射:当需要一个键对应多个值时,NameValueCollection 是一个很好的选择。

注意事项

  1. 线程安全:NameValueCollection 不是线程安全的。如果需要在多线程环境中使用,需要手动同步。
  2. 性能:由于 NameValueCollection 是基于哈希表实现的,性能通常较好,但在大量数据时需要注意性能问题。
  3. 替代方案:在 .NET Core 和 .NET 5+ 中,NameValueCollection 已被标记为过时。可以使用其他集合类型(如 Dictionary<string, List<string>>IReadOnlyDictionary<string, string[]>)来替代。
总之,NameValueCollection 是一个方便的集合类,适用于处理键值对数据,尤其是当一个键可能对应多个值时。
posted @ 2025-02-18 11:29  yinghualeihenmei  阅读(97)  评论(0)    收藏  举报