起因是同事想找到下图这种存储结构的 HashMap:

.NET 一个键对应多个值的集合类型 - 图1

但 .NET Framework 内置的 Hashtable 一个键只能对应单个值无法满足需求。Bing 后,暂时找到两种替代品。

NameValueCollection

它就是前端开发中常用的键值对。优势是可以直接使用,劣势是键和值都只能是 string 类型。

截取的官方示例:

  1. var myCol = new NameValueCollection();
  2. myCol.Add("red", "rojo");
  3. myCol.Add("green", "verde");
  4. myCol.Add("blue", "azul");
  5. myCol.Add("red", "rouge");
  6. Console.WriteLine(myCol["red"]);
  7. // rojo,rouge

Dictionary>

Dictionary 本来是一个键对应单个值,但只要将 TValue 换成任意一种可变的集合类型就能实现一对多了。

示例:

  1. var myCol = new Dictionary<string, List<string>>();
  2. myCol.Add("red", new List<string> { "rojo" });
  3. myCol.Add("green", new List<string> { "verde" });
  4. myCol.Add("blue", new List<string> { "azul" });
  5. myCol["red"].Add("rouge");
  6. Console.WriteLine(string.Join(",", myCol["red"]));
  7. // rojo,rouge